Merge "Fix security vulnerability: Equalizer setParameter memory overflow"
diff --git a/Android.mk b/Android.mk
index 429c4cb..5101724 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 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 msmpeafowl apq8098_latv,$(TARGET_BOARD_PLATFORM)),)
MY_LOCAL_PATH := $(call my-dir)
diff --git a/Makefile.am b/Makefile.am
index ebde009..d4aef58 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -4,4 +4,8 @@
SUBDIRS += qahw_api qahw_api/test
endif
+if AUDIO_HW_LOOPBACK
+SUBDIRS += hdmi_in_test
+endif
+
ACLOCAL_AMFLAGS = -I m4
diff --git a/configs/apq8098_latv/apq8098_latv.mk b/configs/apq8098_latv/apq8098_latv.mk
index 13f5882..242c6d5 100644
--- a/configs/apq8098_latv/apq8098_latv.mk
+++ b/configs/apq8098_latv/apq8098_latv.mk
@@ -123,117 +123,109 @@
# Low latency audio buffer size in frames
PRODUCT_PROPERTY_OVERRIDES += \
- audio_hal.period_size=192
+ vendor.audio_hal.period_size=192
##fluencetype can be "fluence" or "fluencepro" or "none"
PRODUCT_PROPERTY_OVERRIDES += \
-ro.qc.sdk.audio.fluencetype=none\
-persist.audio.fluence.voicecall=true\
-persist.audio.fluence.voicerec=false\
-persist.audio.fluence.speaker=true
+ro.vendor.audio.sdk.fluencetype=none\
+persist.vendor.audio.fluence.voicecall=true\
+persist.vendor.audio.fluence.voicerec=false\
+persist.vendor.audio.fluence.speaker=true
#disable tunnel encoding
PRODUCT_PROPERTY_OVERRIDES += \
-tunnel.audio.encode=false
+vendor.audio.tunnel.encode=false
#Disable RAS Feature by default
PRODUCT_PROPERTY_OVERRIDES += \
-persist.audio.ras.enabled=false
+persist.vendor.audio.ras.enabled=false
#Buffer size in kbytes for compress offload playback
PRODUCT_PROPERTY_OVERRIDES += \
-audio.offload.buffer.size.kb=32
+vendor.audio.offload.buffer.size.kb=32
#Enable offload audio video playback by default
PRODUCT_PROPERTY_OVERRIDES += \
audio.offload.video=true
-#Enable 16 bit PCM offload by default
-PRODUCT_PROPERTY_OVERRIDES += \
-audio.offload.pcm.16bit.enable=true
-
-#Enable 24 bit PCM offload by default
-PRODUCT_PROPERTY_OVERRIDES += \
-audio.offload.pcm.24bit.enable=true
-
#Enable audio track offload by default
PRODUCT_PROPERTY_OVERRIDES += \
-audio.offload.track.enable=true
+vendor.audio.offload.track.enable=true
#Enable music through deep buffer
PRODUCT_PROPERTY_OVERRIDES += \
audio.deep_buffer.media=true
-#QC property used when calculating client heap size in audio flinger
-PRODUCT_PROPERTY_OVERRIDES += \
-audio.heap.size.multiplier=7
-
#enable voice path for PCM VoIP by default
PRODUCT_PROPERTY_OVERRIDES += \
-use.voice.path.for.pcm.voip=true
+vendor.voice.path.for.pcm.voip=true
#Enable multi channel aac through offload
PRODUCT_PROPERTY_OVERRIDES += \
-audio.offload.multiaac.enable=true
+vendor.audio.offload.multiaac.enable=true
#Enable DS2, Hardbypass feature for Dolby
PRODUCT_PROPERTY_OVERRIDES += \
-audio.dolby.ds2.enabled=false\
-audio.dolby.ds2.hardbypass=false
+vendor.audio.dolby.ds2.enabled=false\
+vendor.audio.dolby.ds2.hardbypass=false
#Disable Multiple offload sesison
PRODUCT_PROPERTY_OVERRIDES += \
-audio.offload.multiple.enabled=false
+vendor.audio.offload.multiple.enabled=false
#Disable Compress passthrough playback
PRODUCT_PROPERTY_OVERRIDES += \
-audio.offload.passthrough=false
+vendor.audio.offload.passthrough=false
#Disable surround sound recording
PRODUCT_PROPERTY_OVERRIDES += \
-ro.qc.sdk.audio.ssr=false
+ro.vendor.audio.sdk.ssr=false
#enable dsp gapless mode by default
PRODUCT_PROPERTY_OVERRIDES += \
-audio.offload.gapless.enabled=true
+vendor.audio.offload.gapless.enabled=true
#enable pbe effects
PRODUCT_PROPERTY_OVERRIDES += \
-audio.safx.pbe.enabled=true
+vendor.audio.safx.pbe.enabled=true
#parser input buffer size(256kb) in byte stream mode
PRODUCT_PROPERTY_OVERRIDES += \
-audio.parser.ip.buffer.size=262144
+vendor.audio.parser.ip.buffer.size=262144
#flac sw decoder 24 bit decode capability
PRODUCT_PROPERTY_OVERRIDES += \
-flac.sw.decoder.24bit.support=true
+vendor.audio.flac.sw.decoder.24bit=true
#split a2dp DSP supported encoder list
PRODUCT_PROPERTY_OVERRIDES += \
-persist.bt.a2dp_offload_cap=sbc-aptx-aptxhd-aac
+persist.vendor.bt.a2dp_offload_cap=sbc-aptx-aptxhd-aac
#enable software decoders for ALAC and APE
PRODUCT_PROPERTY_OVERRIDES += \
-use.qti.sw.alac.decoder=true
+vendor.audio.use.sw.alac.decoder=true
PRODUCT_PROPERTY_OVERRIDES += \
-use.qti.sw.ape.decoder=true
+vendor.audio.use.sw.ape.decoder=true
#enable hw aac encoder by default
PRODUCT_PROPERTY_OVERRIDES += \
-qcom.hw.aac.encoder=true
+vendor.audio.hw.aac.encoder=true
#Disable FM a2dp concurrency
PRODUCT_PROPERTY_OVERRIDES += \
-fm.a2dp.conc.disabled=true
+vendor.fm.a2dp.conc.disabled=true
#audio becoming noisy intent broadcast delay
PRODUCT_PROPERTY_OVERRIDES += \
-audio.noisy.broadcast.delay=600
+vendor.audio.noisy.broadcast.delay=600
#offload pausetime out duration to 3 secs to inline with other outputs
PRODUCT_PROPERTY_OVERRIDES += \
-audio.offload.pstimeout.secs=3
+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 += \
diff --git a/configs/apq8098_latv/audio_policy_configuration.xml b/configs/apq8098_latv/audio_policy_configuration.xml
index fafd322..c8707e3 100644
--- a/configs/apq8098_latv/audio_policy_configuration.xml
+++ b/configs/apq8098_latv/audio_policy_configuration.xml
@@ -329,7 +329,7 @@
<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"/>
+ sources="Built-In Mic,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/msm8937/audio_policy_configuration.xml b/configs/msm8937/audio_policy_configuration.xml
index 73f9198..b2b26a2 100644
--- a/configs/msm8937/audio_policy_configuration.xml
+++ b/configs/msm8937/audio_policy_configuration.xml
@@ -260,7 +260,7 @@
<route type="mix" sink="Telephony Tx"
sources="voice_tx"/>
<route type="mix" sink="primary input"
- sources="Built-In Mic,Wired Headset Mic,BT SCO Headset Mic,FM Tuner,Telephony Rx"/>
+ sources="Wired Headset Mic,BT SCO Headset Mic,FM Tuner,Telephony Rx"/>
<route type="mix" sink="surround_sound"
sources="Built-In Mic,Built-In Back Mic"/>
<route type="mix" sink="voice_rx"
diff --git a/configs/msm8937/msm8937.mk b/configs/msm8937/msm8937.mk
index 98df9d2..6200705 100644
--- a/configs/msm8937/msm8937.mk
+++ b/configs/msm8937/msm8937.mk
@@ -224,6 +224,10 @@
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.flac.sw.decoder.24bit=true
+#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/msm8953/audio_policy_configuration.xml b/configs/msm8953/audio_policy_configuration.xml
index cfaa3e2..424a436 100644
--- a/configs/msm8953/audio_policy_configuration.xml
+++ b/configs/msm8953/audio_policy_configuration.xml
@@ -271,7 +271,7 @@
<route type="mix" sink="Telephony Tx"
sources="voice_tx"/>
<route type="mix" sink="primary input"
- sources="Built-In Mic,Wired Headset Mic,BT SCO Headset Mic,FM Tuner,Telephony Rx"/>
+ sources="Wired Headset Mic,BT SCO Headset Mic,FM Tuner,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/msm8953/msm8953.mk b/configs/msm8953/msm8953.mk
index 56342f7..068317d 100644
--- a/configs/msm8953/msm8953.mk
+++ b/configs/msm8953/msm8953.mk
@@ -223,6 +223,10 @@
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.flac.sw.decoder.24bit=true
+#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/msm8996/audio_policy_configuration.xml b/configs/msm8996/audio_policy_configuration.xml
index 7b8dbae..815f071 100644
--- a/configs/msm8996/audio_policy_configuration.xml
+++ b/configs/msm8996/audio_policy_configuration.xml
@@ -271,7 +271,7 @@
<route type="mix" sink="Telephony Tx"
sources="voice_tx"/>
<route type="mix" sink="primary input"
- sources="Built-In Mic,Wired Headset Mic,BT SCO Headset Mic,FM Tuner,Telephony Rx"/>
+ sources="Wired Headset Mic,BT SCO Headset Mic,FM Tuner,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/msm8996/msm8996.mk b/configs/msm8996/msm8996.mk
index 69c5c1b..2b815ae 100644
--- a/configs/msm8996/msm8996.mk
+++ b/configs/msm8996/msm8996.mk
@@ -189,6 +189,10 @@
PRODUCT_PROPERTY_OVERRIDES += \
vendor.audio.flac.sw.decoder.24bit=true
+#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/msm8998/audio_platform_info.xml b/configs/msm8998/audio_platform_info.xml
index 56ac9bb..51c3640 100644
--- a/configs/msm8998/audio_platform_info.xml
+++ b/configs/msm8998/audio_platform_info.xml
@@ -49,7 +49,6 @@
<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"/>
@@ -65,6 +64,8 @@
<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_PLAYBACK_MMAP" type="out" id="33" />
+ <usecase name="USECASE_AUDIO_RECORD_MMAP" type="in" id="33" />
</pcm_ids>
<config_params>
<param key="spkr_1_tz_name" value="wsatz.13"/>
@@ -106,6 +107,8 @@
<device name="SND_DEVICE_OUT_VOICE_LINE" backend="headphones" interface="SLIMBUS_6_RX"/>
<device name="SND_DEVICE_OUT_VOICE_TTY_FULL_HEADPHONES" backend="headphones" interface="SLIMBUS_6_RX"/>
<device name="SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES" backend="headphones" interface="SLIMBUS_6_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_BT_SCO" backend="speaker-and-bt-sco" interface="SLIMBUS_0_RX-and-SLIMBUS_7_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB" backend="speaker-and-bt-sco-wb" interface="SLIMBUS_0_RX-and-SLIMBUS_7_RX"/>
</backend_names>
</audio_platform_info>
diff --git a/configs/msm8998/audio_policy_configuration.xml b/configs/msm8998/audio_policy_configuration.xml
index 09a4bb9..e084bba 100644
--- a/configs/msm8998/audio_policy_configuration.xml
+++ b/configs/msm8998/audio_policy_configuration.xml
@@ -68,6 +68,10 @@
<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"
@@ -191,6 +195,11 @@
<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>
@@ -302,15 +311,15 @@
<!-- 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"/>
+ 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"/>
+ 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"/>
+ 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"/>
+ 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"/>
+ 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"
@@ -318,19 +327,21 @@
<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"/>
+ 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"/>
+ 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="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"
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"/>
<route type="mix" sink="BT A2DP Out"
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload"/>
<route type="mix" sink="BT A2DP Headphones"
diff --git a/configs/msm8998/mixer_paths_skuk.xml b/configs/msm8998/mixer_paths_skuk.xml
index 1436b6f..e4b3785 100644
--- a/configs/msm8998/mixer_paths_skuk.xml
+++ b/configs/msm8998/mixer_paths_skuk.xml
@@ -612,6 +612,16 @@
<path name="deep-buffer-playback" />
</path>
+ <path name="deep-buffer-playback speaker-and-bt-sco">
+ <path name="deep-buffer-playback bt-sco" />
+ <path name="deep-buffer-playback" />
+ </path>
+
+ <path name="deep-buffer-playback speaker-and-bt-sco-wb">
+ <path name="deep-buffer-playback bt-sco-wb" />
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="low-latency-playback">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia5" value="1" />
</path>
@@ -673,6 +683,16 @@
<path name="low-latency-playback" />
</path>
+ <path name="low-latency-playback speaker-and-bt-sco">
+ <path name="low-latency-playback bt-sco" />
+ <path name="low-latency-playback" />
+ </path>
+
+ <path name="low-latency-playback speaker-and-bt-sco-wb">
+ <path name="low-latency-playback bt-sco-wb" />
+ <path name="low-latency-playback" />
+ </path>
+
<path name="audio-ull-playback">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia8" value="1" />
</path>
@@ -729,6 +749,16 @@
<ctl name="USB_AUDIO_RX Audio Mixer MultiMedia8" value="1" />
</path>
+ <path name="audio-ull-playback speaker-and-bt-sco">
+ <path name="audio-ull-playback bt-sco" />
+ <path name="audio-ull-playback" />
+ </path>
+
+ <path name="audio-ull-playback speaker-and-bt-sco-wb">
+ <path name="audio-ull-playback bt-sco-wb" />
+ <path name="audio-ull-playback" />
+ </path>
+
<path name="multi-channel-playback hdmi">
<ctl name="HDMI Mixer MultiMedia2" value="1" />
</path>
@@ -818,6 +848,16 @@
<path name="compress-offload-playback" />
</path>
+ <path name="compress-offload-playback speaker-and-bt-sco">
+ <path name="compress-offload-playback bt-sco" />
+ <path name="compress-offload-playback" />
+ </path>
+
+ <path name="compress-offload-playback speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback bt-sco-wb" />
+ <path name="compress-offload-playback" />
+ </path>
+
<path name="compress-offload-playback2">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia7" value="1" />
</path>
@@ -883,6 +923,16 @@
<path name="compress-offload-playback2" />
</path>
+ <path name="compress-offload-playback2 speaker-and-bt-sco">
+ <path name="compress-offload-playback2 bt-sco" />
+ <path name="compress-offload-playback2" />
+ </path>
+
+ <path name="compress-offload-playback2 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback2 bt-sco-wb" />
+ <path name="compress-offload-playback2" />
+ </path>
+
<path name="compress-offload-playback3">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia10" value="1" />
</path>
@@ -948,6 +998,16 @@
<path name="compress-offload-playback3" />
</path>
+ <path name="compress-offload-playback3 speaker-and-bt-sco">
+ <path name="compress-offload-playback3 bt-sco" />
+ <path name="compress-offload-playback3" />
+ </path>
+
+ <path name="compress-offload-playback3 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback3 bt-sco-wb" />
+ <path name="compress-offload-playback3" />
+ </path>
+
<path name="compress-offload-playback4">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia11" value="1" />
</path>
@@ -1014,6 +1074,16 @@
<path name="compress-offload-playback4" />
</path>
+ <path name="compress-offload-playback4 speaker-and-bt-sco">
+ <path name="compress-offload-playback4 bt-sco" />
+ <path name="compress-offload-playback4" />
+ </path>
+
+ <path name="compress-offload-playback4 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback4 bt-sco-wb" />
+ <path name="compress-offload-playback4" />
+ </path>
+
<path name="compress-offload-playback5">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia12" value="1" />
</path>
@@ -1079,6 +1149,16 @@
<path name="compress-offload-playback5" />
</path>
+ <path name="compress-offload-playback5 speaker-and-bt-sco">
+ <path name="compress-offload-playback5 bt-sco" />
+ <path name="compress-offload-playback5" />
+ </path>
+
+ <path name="compress-offload-playback5 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback5 bt-sco-wb" />
+ <path name="compress-offload-playback5" />
+ </path>
+
<path name="compress-offload-playback6">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia13" value="1" />
</path>
@@ -1144,6 +1224,16 @@
<path name="compress-offload-playback6" />
</path>
+ <path name="compress-offload-playback6 speaker-and-bt-sco">
+ <path name="compress-offload-playback6 bt-sco" />
+ <path name="compress-offload-playback6" />
+ </path>
+
+ <path name="compress-offload-playback6 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback6 bt-sco-wb" />
+ <path name="compress-offload-playback6" />
+ </path>
+
<path name="compress-offload-playback7">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia14" value="1" />
</path>
@@ -1209,6 +1299,16 @@
<path name="compress-offload-playback7" />
</path>
+ <path name="compress-offload-playback7 speaker-and-bt-sco">
+ <path name="compress-offload-playback7 bt-sco" />
+ <path name="compress-offload-playback7" />
+ </path>
+
+ <path name="compress-offload-playback7 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback7 bt-sco-wb" />
+ <path name="compress-offload-playback7" />
+ </path>
+
<path name="compress-offload-playback8">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia15" value="1" />
</path>
@@ -1274,6 +1374,16 @@
<path name="compress-offload-playback8" />
</path>
+ <path name="compress-offload-playback8 speaker-and-bt-sco">
+ <path name="compress-offload-playback8 bt-sco" />
+ <path name="compress-offload-playback8" />
+ </path>
+
+ <path name="compress-offload-playback8 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback8 bt-sco-wb" />
+ <path name="compress-offload-playback8" />
+ </path>
+
<path name="compress-offload-playback9">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia16" value="1" />
</path>
@@ -1339,6 +1449,16 @@
<path name="compress-offload-playback9" />
</path>
+ <path name="compress-offload-playback9 speaker-and-bt-sco">
+ <path name="compress-offload-playback9 bt-sco" />
+ <path name="compress-offload-playback9" />
+ </path>
+
+ <path name="compress-offload-playback9 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback9 bt-sco-wb" />
+ <path name="compress-offload-playback9" />
+ </path>
+
<path name="audio-record">
<ctl name="MultiMedia1 Mixer SLIM_0_TX" value="1" />
</path>
diff --git a/configs/msm8998/mixer_paths_tasha.xml b/configs/msm8998/mixer_paths_tasha.xml
index 61cd3cc..93656e6 100644
--- a/configs/msm8998/mixer_paths_tasha.xml
+++ b/configs/msm8998/mixer_paths_tasha.xml
@@ -125,6 +125,10 @@
<ctl name="MultiMedia1 Mixer SLIM_0_TX" value="0" />
<ctl name="MultiMedia1 Mixer SLIM_4_TX" value="0" />
<ctl name="MultiMedia1 Mixer SLIM_7_TX" value="0" />
+ <ctl name="HDMI RX Format" value="LPCM" />
+ <ctl name="HDMI_RX Bit Format" value="S16_LE" />
+ <ctl name="HDMI_RX SampleRate" value="KHZ_48" />
+ <ctl name="HDMI_RX Channels" value="Two" />
<ctl name="HDMI Mixer MultiMedia1" value="0" />
<ctl name="HDMI Mixer MultiMedia2" value="0" />
<ctl name="HDMI Mixer MultiMedia3" value="0" />
@@ -139,6 +143,10 @@
<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 RX Format" value="LPCM" />
+ <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="DISPLAY_PORT Mixer MultiMedia1" value="0" />
<ctl name="DISPLAY_PORT Mixer MultiMedia2" value="0" />
<ctl name="DISPLAY_PORT Mixer MultiMedia3" value="0" />
@@ -682,6 +690,16 @@
<path name="deep-buffer-playback" />
</path>
+ <path name="deep-buffer-playback speaker-and-bt-sco">
+ <path name="deep-buffer-playback bt-sco" />
+ <path name="deep-buffer-playback" />
+ </path>
+
+ <path name="deep-buffer-playback speaker-and-bt-sco-wb">
+ <path name="deep-buffer-playback bt-sco-wb" />
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="low-latency-playback">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia5" value="1" />
</path>
@@ -743,6 +761,16 @@
<path name="low-latency-playback" />
</path>
+ <path name="low-latency-playback speaker-and-bt-sco">
+ <path name="low-latency-playback bt-sco" />
+ <path name="low-latency-playback" />
+ </path>
+
+ <path name="low-latency-playback speaker-and-bt-sco-wb">
+ <path name="low-latency-playback bt-sco-wb" />
+ <path name="low-latency-playback" />
+ </path>
+
<path name="audio-ull-playback">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia8" value="1" />
</path>
@@ -799,6 +827,16 @@
<ctl name="USB_AUDIO_RX Audio Mixer MultiMedia8" value="1" />
</path>
+ <path name="audio-ull-playback speaker-and-bt-sco">
+ <path name="audio-ull-playback bt-sco" />
+ <path name="audio-ull-playback" />
+ </path>
+
+ <path name="audio-ull-playback speaker-and-bt-sco-wb">
+ <path name="audio-ull-playback bt-sco-wb" />
+ <path name="audio-ull-playback" />
+ </path>
+
<path name="multi-channel-playback hdmi">
<ctl name="HDMI Mixer MultiMedia2" value="1" />
</path>
@@ -884,6 +922,16 @@
<path name="compress-offload-playback" />
</path>
+ <path name="compress-offload-playback speaker-and-bt-sco">
+ <path name="compress-offload-playback bt-sco" />
+ <path name="compress-offload-playback" />
+ </path>
+
+ <path name="compress-offload-playback speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback bt-sco-wb" />
+ <path name="compress-offload-playback" />
+ </path>
+
<path name="compress-offload-playback2">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia7" value="1" />
</path>
@@ -945,6 +993,16 @@
<path name="compress-offload-playback2" />
</path>
+ <path name="compress-offload-playback2 speaker-and-bt-sco">
+ <path name="compress-offload-playback2 bt-sco" />
+ <path name="compress-offload-playback2" />
+ </path>
+
+ <path name="compress-offload-playback2 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback2 bt-sco-wb" />
+ <path name="compress-offload-playback2" />
+ </path>
+
<path name="compress-offload-playback3">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia10" value="1" />
</path>
@@ -1006,6 +1064,16 @@
<path name="compress-offload-playback3" />
</path>
+ <path name="compress-offload-playback3 speaker-and-bt-sco">
+ <path name="compress-offload-playback3 bt-sco" />
+ <path name="compress-offload-playback3" />
+ </path>
+
+ <path name="compress-offload-playback3 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback3 bt-sco-wb" />
+ <path name="compress-offload-playback3" />
+ </path>
+
<path name="compress-offload-playback4">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia11" value="1" />
</path>
@@ -1068,6 +1136,16 @@
<path name="compress-offload-playback4" />
</path>
+ <path name="compress-offload-playback4 speaker-and-bt-sco">
+ <path name="compress-offload-playback4 bt-sco" />
+ <path name="compress-offload-playback4" />
+ </path>
+
+ <path name="compress-offload-playback4 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback4 bt-sco-wb" />
+ <path name="compress-offload-playback4" />
+ </path>
+
<path name="compress-offload-playback5">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia12" value="1" />
</path>
@@ -1129,6 +1207,16 @@
<path name="compress-offload-playback5" />
</path>
+ <path name="compress-offload-playback5 speaker-and-bt-sco">
+ <path name="compress-offload-playback5 bt-sco" />
+ <path name="compress-offload-playback5" />
+ </path>
+
+ <path name="compress-offload-playback5 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback5 bt-sco-wb" />
+ <path name="compress-offload-playback5" />
+ </path>
+
<path name="compress-offload-playback6">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia13" value="1" />
</path>
@@ -1190,6 +1278,16 @@
<path name="compress-offload-playback6" />
</path>
+ <path name="compress-offload-playback6 speaker-and-bt-sco">
+ <path name="compress-offload-playback6 bt-sco" />
+ <path name="compress-offload-playback6" />
+ </path>
+
+ <path name="compress-offload-playback6 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback6 bt-sco-wb" />
+ <path name="compress-offload-playback6" />
+ </path>
+
<path name="compress-offload-playback7">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia14" value="1" />
</path>
@@ -1251,6 +1349,16 @@
<path name="compress-offload-playback7" />
</path>
+ <path name="compress-offload-playback7 speaker-and-bt-sco">
+ <path name="compress-offload-playback7 bt-sco" />
+ <path name="compress-offload-playback7" />
+ </path>
+
+ <path name="compress-offload-playback7 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback7 bt-sco-wb" />
+ <path name="compress-offload-playback7" />
+ </path>
+
<path name="compress-offload-playback8">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia15" value="1" />
</path>
@@ -1312,6 +1420,16 @@
<path name="compress-offload-playback8" />
</path>
+ <path name="compress-offload-playback8 speaker-and-bt-sco">
+ <path name="compress-offload-playback8 bt-sco" />
+ <path name="compress-offload-playback8" />
+ </path>
+
+ <path name="compress-offload-playback8 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback8 bt-sco-wb" />
+ <path name="compress-offload-playback8" />
+ </path>
+
<path name="compress-offload-playback9">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia16" value="1" />
</path>
@@ -1373,6 +1491,16 @@
<path name="compress-offload-playback9" />
</path>
+ <path name="compress-offload-playback9 speaker-and-bt-sco">
+ <path name="compress-offload-playback9 bt-sco" />
+ <path name="compress-offload-playback9" />
+ </path>
+
+ <path name="compress-offload-playback9 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback9 bt-sco-wb" />
+ <path name="compress-offload-playback9" />
+ </path>
+
<path name="audio-record">
<ctl name="MultiMedia1 Mixer SLIM_0_TX" value="1" />
</path>
diff --git a/configs/msm8998/mixer_paths_tavil.xml b/configs/msm8998/mixer_paths_tavil.xml
index 51a3083..ba37799 100644
--- a/configs/msm8998/mixer_paths_tavil.xml
+++ b/configs/msm8998/mixer_paths_tavil.xml
@@ -72,6 +72,10 @@
<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="HDMI RX Format" value="LPCM" />
+ <ctl name="HDMI_RX Bit Format" value="S16_LE" />
+ <ctl name="HDMI_RX SampleRate" value="KHZ_48" />
+ <ctl name="HDMI_RX Channels" value="Two" />
<ctl name="HDMI Mixer MultiMedia1" value="0" />
<ctl name="HDMI Mixer MultiMedia2" value="0" />
<ctl name="HDMI Mixer MultiMedia3" value="0" />
@@ -86,6 +90,10 @@
<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 RX Format" value="LPCM" />
+ <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="DISPLAY_PORT Mixer MultiMedia1" value="0" />
<ctl name="DISPLAY_PORT Mixer MultiMedia2" value="0" />
<ctl name="DISPLAY_PORT Mixer MultiMedia3" value="0" />
@@ -297,6 +305,7 @@
<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="SLIMBUS_7_RX Audio Mixer MultiMedia16" value="0" />
<ctl name="MultiMedia1 Mixer SLIM_7_TX" value="0" />
<!-- audio record compress-->
<ctl name="MultiMedia8 Mixer SLIM_0_TX" value="0" />
@@ -620,6 +629,16 @@
<path name="deep-buffer-playback" />
</path>
+ <path name="deep-buffer-playback speaker-and-bt-sco">
+ <path name="deep-buffer-playback bt-sco" />
+ <path name="deep-buffer-playback" />
+ </path>
+
+ <path name="deep-buffer-playback speaker-and-bt-sco-wb">
+ <path name="deep-buffer-playback bt-sco-wb" />
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="low-latency-playback">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia5" value="1" />
</path>
@@ -681,6 +700,16 @@
<path name="low-latency-playback" />
</path>
+ <path name="low-latency-playback speaker-and-bt-sco">
+ <path name="low-latency-playback bt-sco" />
+ <path name="low-latency-playback" />
+ </path>
+
+ <path name="low-latency-playback speaker-and-bt-sco-wb">
+ <path name="low-latency-playback bt-sco-wb" />
+ <path name="low-latency-playback" />
+ </path>
+
<path name="audio-ull-playback">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia8" value="1" />
</path>
@@ -737,6 +766,16 @@
<ctl name="USB_AUDIO_RX Audio Mixer MultiMedia8" value="1" />
</path>
+ <path name="audio-ull-playback speaker-and-bt-sco">
+ <path name="audio-ull-playback bt-sco" />
+ <path name="audio-ull-playback" />
+ </path>
+
+ <path name="audio-ull-playback speaker-and-bt-sco-wb">
+ <path name="audio-ull-playback bt-sco-wb" />
+ <path name="audio-ull-playback" />
+ </path>
+
<path name="multi-channel-playback hdmi">
<ctl name="HDMI Mixer MultiMedia2" value="1" />
</path>
@@ -826,6 +865,16 @@
<path name="compress-offload-playback" />
</path>
+ <path name="compress-offload-playback speaker-and-bt-sco">
+ <path name="compress-offload-playback bt-sco" />
+ <path name="compress-offload-playback" />
+ </path>
+
+ <path name="compress-offload-playback speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback bt-sco-wb" />
+ <path name="compress-offload-playback" />
+ </path>
+
<path name="compress-offload-playback2">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia7" value="1" />
</path>
@@ -891,6 +940,16 @@
<path name="compress-offload-playback2" />
</path>
+ <path name="compress-offload-playback2 speaker-and-bt-sco">
+ <path name="compress-offload-playback2 bt-sco" />
+ <path name="compress-offload-playback2" />
+ </path>
+
+ <path name="compress-offload-playback2 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback2 bt-sco-wb" />
+ <path name="compress-offload-playback2" />
+ </path>
+
<path name="compress-offload-playback3">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia10" value="1" />
</path>
@@ -956,6 +1015,16 @@
<path name="compress-offload-playback3" />
</path>
+ <path name="compress-offload-playback3 speaker-and-bt-sco">
+ <path name="compress-offload-playback3 bt-sco" />
+ <path name="compress-offload-playback3" />
+ </path>
+
+ <path name="compress-offload-playback3 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback3 bt-sco-wb" />
+ <path name="compress-offload-playback3" />
+ </path>
+
<path name="compress-offload-playback4">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia11" value="1" />
</path>
@@ -1022,6 +1091,16 @@
<path name="compress-offload-playback4" />
</path>
+ <path name="compress-offload-playback4 speaker-and-bt-sco">
+ <path name="compress-offload-playback4 bt-sco" />
+ <path name="compress-offload-playback4" />
+ </path>
+
+ <path name="compress-offload-playback4 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback4 bt-sco-wb" />
+ <path name="compress-offload-playback4" />
+ </path>
+
<path name="compress-offload-playback5">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia12" value="1" />
</path>
@@ -1087,6 +1166,16 @@
<path name="compress-offload-playback5" />
</path>
+ <path name="compress-offload-playback5 speaker-and-bt-sco">
+ <path name="compress-offload-playback5 bt-sco" />
+ <path name="compress-offload-playback5" />
+ </path>
+
+ <path name="compress-offload-playback5 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback5 bt-sco-wb" />
+ <path name="compress-offload-playback5" />
+ </path>
+
<path name="compress-offload-playback6">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia13" value="1" />
</path>
@@ -1152,6 +1241,16 @@
<path name="compress-offload-playback6" />
</path>
+ <path name="compress-offload-playback6 speaker-and-bt-sco">
+ <path name="compress-offload-playback6 bt-sco" />
+ <path name="compress-offload-playback6" />
+ </path>
+
+ <path name="compress-offload-playback6 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback6 bt-sco-wb" />
+ <path name="compress-offload-playback6" />
+ </path>
+
<path name="compress-offload-playback7">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia14" value="1" />
</path>
@@ -1217,6 +1316,16 @@
<path name="compress-offload-playback7" />
</path>
+ <path name="compress-offload-playback7 speaker-and-bt-sco">
+ <path name="compress-offload-playback7 bt-sco" />
+ <path name="compress-offload-playback7" />
+ </path>
+
+ <path name="compress-offload-playback7 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback7 bt-sco-wb" />
+ <path name="compress-offload-playback7" />
+ </path>
+
<path name="compress-offload-playback8">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia15" value="1" />
</path>
@@ -1282,6 +1391,16 @@
<path name="compress-offload-playback8" />
</path>
+ <path name="compress-offload-playback8 speaker-and-bt-sco">
+ <path name="compress-offload-playback8 bt-sco" />
+ <path name="compress-offload-playback8" />
+ </path>
+
+ <path name="compress-offload-playback8 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback8 bt-sco-wb" />
+ <path name="compress-offload-playback8" />
+ </path>
+
<path name="compress-offload-playback9">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia16" value="1" />
</path>
@@ -1347,6 +1466,16 @@
<path name="compress-offload-playback9" />
</path>
+ <path name="compress-offload-playback9 speaker-and-bt-sco">
+ <path name="compress-offload-playback9 bt-sco" />
+ <path name="compress-offload-playback9" />
+ </path>
+
+ <path name="compress-offload-playback9 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback9 bt-sco-wb" />
+ <path name="compress-offload-playback9" />
+ </path>
+
<path name="audio-record">
<ctl name="MultiMedia1 Mixer SLIM_0_TX" value="1" />
</path>
@@ -2593,4 +2722,83 @@
<path name="audio-ull-playback bt-a2dp" />
<path name="audio-ull-playback" />
</path>
+
+ <path name="mmap-playback">
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback headphones">
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback speaker-and-headphones">
+ <path name="mmap-playback" />
+ <path name="mmap-playback headphones" />
+ </path>
+
+ <path name="mmap-playback bt-sco">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="mmap-playback bt-sco" />
+ </path>
+
+ <path name="mmap-playback afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-buffer-playback hdmi">
+ <ctl name="HDMI Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback speaker-and-hdmi">
+ <path name="mmap-playback hdmi" />
+ <path name="mmap-playback" />
+ </path>
+
+ <path name="mmap-playback speaker-and-display-port">
+ <path name="mmap-playback display-port" />
+ <path name="mmap-playback" />
+ </path>
+
+ <path name="mmap-playback speaker-and-usb-headphones">
+ <path name="mmap-playback usb-headphones" />
+ <path name="mmap-playback" />
+ </path>
+
+ <path name="mmap-record">
+ <ctl name="MultiMedia16 Mixer SLIM_0_TX" value="1" />
+ </path>
+
+ <path name="mmap-record bt-sco">
+ <ctl name="MultiMedia16 Mixer SLIM_7_TX" value="1" />
+ </path>
+
+ <path name="mmap-record bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="mmap-record bt-sco" />
+ </path>
+
+ <path name="mmap-record capture-fm">
+ <ctl name="MultiMedia16 Mixer SLIM_8_TX" value="1" />
+ </path>
+
+ <path name="mmap-record usb-headset-mic">
+ <ctl name="MultiMedia16 Mixer USB_AUDIO_TX" value="1" />
+ </path>
+
</mixer>
diff --git a/configs/msm8998/msm8998.mk b/configs/msm8998/msm8998.mk
index 9d77482..dd68841 100644
--- a/configs/msm8998/msm8998.mk
+++ b/configs/msm8998/msm8998.mk
@@ -223,6 +223,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/msmpeafowl/audio_effects.conf b/configs/msmpeafowl/audio_effects.conf
new file mode 100644
index 0000000..ddf578f
--- /dev/null
+++ b/configs/msmpeafowl/audio_effects.conf
@@ -0,0 +1,360 @@
+# List of effect libraries to load. Each library element must contain a "path" element
+# giving the full path of the library .so file.
+# libraries {
+# <lib name> {
+# path <lib path>
+# }
+# }
+libraries {
+ bundle {
+ path /vendor/lib/soundfx/libbundlewrapper.so
+ }
+ reverb {
+ path /vendor/lib/soundfx/libreverbwrapper.so
+ }
+ qcbassboost {
+ path /vendor/lib/soundfx/libqcbassboost.so
+ }
+ qcvirt {
+ path /vendor/lib/soundfx/libqcvirt.so
+ }
+ qcreverb {
+ path /vendor/lib/soundfx/libqcreverb.so
+ }
+ visualizer_sw {
+ path /vendor/lib/soundfx/libvisualizer.so
+ }
+ visualizer_hw {
+ path /vendor/lib/soundfx/libqcomvisualizer.so
+ }
+ downmix {
+ path /vendor/lib/soundfx/libdownmix.so
+ }
+ loudness_enhancer {
+ path /vendor/lib/soundfx/libldnhncr.so
+ }
+ proxy {
+ path /vendor/lib/soundfx/libeffectproxy.so
+ }
+ offload_bundle {
+ path /vendor/lib/soundfx/libqcompostprocbundle.so
+ }
+ audio_pre_processing {
+ path /vendor/lib/soundfx/libqcomvoiceprocessing.so
+ }
+ volume_listener {
+ path /vendor/lib/soundfx/libvolumelistener.so
+ }
+ audiosphere {
+ path /vendor/lib/soundfx/libasphere.so
+ }
+ shoebox {
+ path /vendor/lib/soundfx/libshoebox.so
+ }
+}
+
+# Default pre-processing library. Add to audio_effect.conf "libraries" section if
+# audio HAL implements support for default software audio pre-processing effects
+#
+# pre_processing {
+# path /vendor/lib/soundfx/libaudiopreprocessing.so
+# }
+
+# list of effects to load. Each effect element must contain a "library" and a "uuid" element.
+# The value of the "library" element must correspond to the name of one library element in the
+# "libraries" element.
+# The name of the effect element is indicative, only the value of the "uuid" element
+# designates the effect.
+# The uuid is the implementation specific UUID as specified by the effect vendor. This is not the
+# generic effect type UUID.
+# effects {
+# <fx name> {
+# library <lib name>
+# uuid <effect uuid>
+# }
+# ...
+# }
+
+effects {
+
+# additions for the proxy implementation
+# Proxy implementation
+ #effectname {
+ #library proxy
+ #uuid xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
+
+ # SW implemetation of the effect. Added as a node under the proxy to
+ # indicate this as a sub effect.
+ #libsw {
+ #library libSW
+ #uuid yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
+ #} End of SW effect
+
+ # HW implementation of the effect. Added as a node under the proxy to
+ # indicate this as a sub effect.
+ #libhw {
+ #library libHW
+ #uuid zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz
+ #}End of HW effect
+ #} End of effect proxy
+
+ bassboost {
+ library proxy
+ uuid 14804144-a5ee-4d24-aa88-0002a5d5c51b
+
+ libsw {
+ library qcbassboost
+ uuid 23aca180-44bd-11e2-bcfd-0800200c9a66
+ }
+
+ libhw {
+ library offload_bundle
+ uuid 2c4a8c24-1581-487f-94f6-0002a5d5c51b
+ }
+ }
+ virtualizer {
+ library proxy
+ uuid d3467faa-acc7-4d34-acaf-0002a5d5c51b
+
+ libsw {
+ library qcvirt
+ uuid e6c98a16-22a3-11e2-b87b-f23c91aec05e
+ }
+
+ libhw {
+ library offload_bundle
+ uuid 509a4498-561a-4bea-b3b1-0002a5d5c51b
+ }
+ }
+ equalizer {
+ library proxy
+ uuid c8e70ecd-48ca-456e-8a4f-0002a5d5c51b
+
+ libsw {
+ library bundle
+ uuid ce772f20-847d-11df-bb17-0002a5d5c51b
+ }
+
+ libhw {
+ library offload_bundle
+ uuid a0dac280-401c-11e3-9379-0002a5d5c51b
+ }
+ }
+ volume {
+ library bundle
+ uuid 119341a0-8469-11df-81f9-0002a5d5c51b
+ }
+ reverb_env_aux {
+ library proxy
+ uuid 48404ac9-d202-4ccc-bf84-0002a5d5c51b
+
+ libsw {
+ library qcreverb
+ uuid a8c1e5f3-293d-43cd-95ec-d5e26c02e217
+ }
+
+ libhw {
+ library offload_bundle
+ uuid 79a18026-18fd-4185-8233-0002a5d5c51b
+ }
+ }
+ reverb_env_ins {
+ library proxy
+ uuid b707403a-a1c1-4291-9573-0002a5d5c51b
+
+ libsw {
+ library qcreverb
+ uuid 791fff8b-8129-4655-83a4-59bc61034c3a
+ }
+
+ libhw {
+ library offload_bundle
+ uuid eb64ea04-973b-43d2-8f5e-0002a5d5c51b
+ }
+ }
+ reverb_pre_aux {
+ library proxy
+ uuid 1b78f587-6d1c-422e-8b84-0002a5d5c51b
+
+ libsw {
+ library qcreverb
+ uuid 53ef1db5-c0c0-445b-b060-e34d20ebb70a
+ }
+
+ libhw {
+ library offload_bundle
+ uuid 6987be09-b142-4b41-9056-0002a5d5c51b
+ }
+ }
+ reverb_pre_ins {
+ library proxy
+ uuid f3e178d2-ebcb-408e-8357-0002a5d5c51b
+
+ libsw {
+ library qcreverb
+ uuid b08a0e38-22a5-11e2-b87b-f23c91aec05e
+ }
+
+ libhw {
+ library offload_bundle
+ uuid aa2bebf6-47cf-4613-9bca-0002a5d5c51b
+ }
+ }
+ visualizer {
+ library proxy
+ uuid 1d0a1a53-7d5d-48f2-8e71-27fbd10d842c
+
+ libsw {
+ library visualizer_sw
+ uuid d069d9e0-8329-11df-9168-0002a5d5c51b
+ }
+
+ libhw {
+ library visualizer_hw
+ uuid 7a8044a0-1a71-11e3-a184-0002a5d5c51b
+ }
+ }
+ downmix {
+ library downmix
+ uuid 93f04452-e4fe-41cc-91f9-e475b6d1d69f
+ }
+ hw_acc {
+ library offload_bundle
+ uuid 7d1580bd-297f-4683-9239-e475b6d1d69f
+ }
+ loudness_enhancer {
+ library loudness_enhancer
+ uuid fa415329-2034-4bea-b5dc-5b381c8d1e2c
+ }
+ aec {
+ library audio_pre_processing
+ uuid 0f8d0d2a-59e5-45fe-b6e4-248c8a799109
+ }
+ ns {
+ library audio_pre_processing
+ uuid 1d97bb0b-9e2f-4403-9ae3-58c2554306f8
+ }
+ music_helper {
+ library volume_listener
+ uuid 08b8b058-0590-11e5-ac71-0025b32654a0
+ }
+ ring_helper {
+ library volume_listener
+ uuid 0956df94-0590-11e5-bdbe-0025b32654a0
+ }
+ alarm_helper {
+ library volume_listener
+ uuid 09f303e2-0590-11e5-8fdb-0025b32654a0
+ }
+ # voice_helper is called when stream type is voice_call in VoIP usecase
+ voice_helper {
+ library volume_listener
+ uuid 0ace5c08-0590-11e5-ae9e-0025b32654a0
+ }
+ notification_helper {
+ library volume_listener
+ uuid 0b776dde-0590-11e5-81ba-0025b32654a0
+ }
+ audiosphere {
+ library audiosphere
+ uuid 184e62ab-2d19-4364-9d1b-c0a40733866c
+ }
+ shoebox {
+ library shoebox
+ uuid 1eab784c-1a36-4b2a-b7fc-e34c44cab89e
+ }
+}
+
+# additional effect from vendor
+# UUID generated using version 1
+
+output_session_processing {
+ music {
+ music_helper {
+ }
+ }
+ ring {
+ ring_helper {
+ }
+ }
+ alarm {
+ alarm_helper {
+ }
+ }
+ # stream type voice_call is used for VoIP call
+ voice_call {
+ voice_helper {
+ }
+ }
+ notification {
+ notification_helper {
+ }
+ }
+}
+
+# Added aec, ns effects for voice_communication, which are supported by the board
+
+pre_processing {
+ voice_communication {
+ aec {
+ }
+ ns {
+ }
+ }
+}
+
+# Default pre-processing effects. Add to audio_effect.conf "effects" section if
+# audio HAL implements support for them.
+#
+# agc {
+# library pre_processing
+# uuid aa8130e0-66fc-11e0-bad0-0002a5d5c51b
+# }
+# aec {
+# library pre_processing
+# uuid bb392ec0-8d4d-11e0-a896-0002a5d5c51b
+# }
+# ns {
+# library pre_processing
+# uuid c06c8400-8e06-11e0-9cb6-0002a5d5c51b
+# }
+
+# Audio preprocessor configurations.
+# The pre processor configuration consists in a list of elements each describing
+# pre processor settings for a given input source. Valid input source names are:
+# "mic", "camcorder", "voice_recognition", "voice_communication"
+# Each input source element contains a list of effects elements. The name of the effect
+# element must be the name of one of the effects in the "effects" list of the file.
+# Each effect element may optionally contain a list of parameters and their
+# default value to apply when the pre processor effect is created.
+# A parameter is defined by a "param" element and a "value" element. Each of these elements
+# consists in one or more elements specifying a type followed by a value.
+# The types defined are: "int", "short", "float", "bool" and "string"
+# When both "param" and "value" are a single int, a simple form is allowed where just
+# the param and value pair is present in the parameter description
+# pre_processing {
+# <input source name> {
+# <fx name> {
+# <param 1 name> {
+# param {
+# int|short|float|bool|string <value>
+# [ int|short|float|bool|string <value> ]
+# ...
+# }
+# value {
+# int|short|float|bool|string <value>
+# [ int|short|float|bool|string <value> ]
+# ...
+# }
+# }
+# <param 2 name > {<param> <value>}
+# ...
+# }
+# ...
+# }
+# ...
+# }
+
+#
+# TODO: add default audio pre processor configurations after debug and tuning phase
+#
diff --git a/configs/msmpeafowl/audio_output_policy.conf b/configs/msmpeafowl/audio_output_policy.conf
new file mode 100644
index 0000000..76039c7
--- /dev/null
+++ b/configs/msmpeafowl/audio_output_policy.conf
@@ -0,0 +1,77 @@
+# List of profiles for the output device session where stream is routed.
+# A stream opened with the inputs attributes which match the "flags" and
+# "formats" as specified in the profile is routed to a device at
+# sample rate specified under "sampling_rates" and bit width under
+# "bit_width" and the topology extracted from the acdb data against
+# the "app_type".
+#
+# the flags and formats are specified using the strings corresponding to
+# enums in audio.h and audio_policy.h. They are concatenated with "|"
+# without space or "\n".
+# the flags and formats should match the ones in "audio_policy.conf"
+
+outputs {
+ default {
+ flags AUDIO_OUTPUT_FLAG_PRIMARY
+ formats AUDIO_FORMAT_PCM_16_BIT
+ sampling_rates 48000
+ bit_width 16
+ app_type 69937
+ }
+ proaudio {
+ flags AUDIO_OUTPUT_FLAG_FAST|AUDIO_OUTPUT_FLAG_RAW
+ formats AUDIO_FORMAT_PCM_16_BIT
+ sampling_rates 48000
+ bit_width 16
+ app_type 69943
+ }
+ deep_buffer {
+ flags AUDIO_OUTPUT_FLAG_DEEP_BUFFER
+ formats AUDIO_FORMAT_PCM_16_BIT
+ sampling_rates 48000
+ bit_width 16
+ app_type 69936
+ }
+ direct_pcm_16 {
+ flags AUDIO_OUTPUT_FLAG_DIRECT
+ formats AUDIO_FORMAT_PCM_16_BIT|AUDIO_FORMAT_PCM_24_BIT_PACKED|AUDIO_FORMAT_PCM_8_24_BIT|AUDIO_FORMAT_PCM_32_BIT
+ sampling_rates 44100|48000|88200|96000|176400|192000
+ bit_width 16
+ app_type 69936
+ }
+ direct_pcm_24 {
+ flags AUDIO_OUTPUT_FLAG_DIRECT
+ formats AUDIO_FORMAT_PCM_24_BIT_PACKED|AUDIO_FORMAT_PCM_8_24_BIT|AUDIO_FORMAT_PCM_32_BIT
+ sampling_rates 44100|48000|88200|96000|176400|192000|352800|384000
+ bit_width 24
+ app_type 69940
+ }
+ direct_pcm_32 {
+ flags AUDIO_OUTPUT_FLAG_DIRECT
+ formats AUDIO_FORMAT_PCM_32_BIT
+ sampling_rates 44100|48000|88200|96000|176400|192000|352800|384000
+ bit_width 32
+ app_type 69942
+ }
+ compress_passthrough {
+ flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING|AUDIO_OUTPUT_FLAG_COMPRESS_PASSTHROUGH
+ formats AUDIO_FORMAT_AC3|AUDIO_FORMAT_E_AC3|AUDIO_FORMAT_E_AC3_JOC|AUDIO_FORMAT_DTS|AUDIO_FORMAT_DTS_HD|AUDIO_FORMAT_DSD
+ sampling_rates 32000|44100|48000|88200|96000|176400|192000|352800
+ bit_width 16
+ app_type 69941
+ }
+ compress_offload_16 {
+ flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING
+ formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_PCM_16_BIT_OFFLOAD|AUDIO_FORMAT_PCM_24_BIT_OFFLOAD|AUDIO_FORMAT_FLAC|AUDIO_FORMAT_ALAC|AUDIO_FORMAT_APE|AUDIO_FORMAT_AAC_LC|AUDIO_FORMAT_AAC_HE_V1|AUDIO_FORMAT_AAC_HE_V2|AUDIO_FORMAT_WMA|AUDIO_FORMAT_WMA_PRO|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2
+ sampling_rates 44100|48000|88200|96000|176400|192000
+ bit_width 16
+ app_type 69936
+ }
+ compress_offload_24 {
+ flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING
+ formats AUDIO_FORMAT_PCM_24_BIT_OFFLOAD|AUDIO_FORMAT_FLAC|AUDIO_FORMAT_ALAC|AUDIO_FORMAT_APE|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_WMA|AUDIO_FORMAT_WMA_PRO
+ sampling_rates 44100|48000|88200|96000|176400|192000
+ bit_width 24
+ app_type 69940
+ }
+}
diff --git a/configs/msmpeafowl/audio_platform_info.xml b/configs/msmpeafowl/audio_platform_info.xml
new file mode 100644
index 0000000..57cddc2
--- /dev/null
+++ b/configs/msmpeafowl/audio_platform_info.xml
@@ -0,0 +1,119 @@
+<?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, -->
+<!-- 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>
+ <acdb_ids>
+ <device name="SND_DEVICE_OUT_SPEAKER" acdb_id="15"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_PROTECTED" acdb_id="124"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_QMIC_FLUENCE" acdb_id="131"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_TMIC" acdb_id="131"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE" acdb_id="132"/>
+ <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>
+ <bit_width_configs>
+ <device name="SND_DEVICE_OUT_SPEAKER" bit_width="24"/>
+ </bit_width_configs>
+ <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="37"/>
+ <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="35" />
+ <usecase name="USECASE_AUDIO_HFP_SCO_WB" type="in" id="35" />
+ </pcm_ids>
+ <config_params>
+ <param key="spkr_1_tz_name" value="wsatz.13"/>
+ <param key="spkr_2_tz_name" value="wsatz.14"/>
+ <!-- In the below value string, the value indicates default mono -->
+ <!-- speaker. It can be set to either left or right -->
+ <param key="mono_speaker" value="right"/>
+ <!-- In the below value string, first parameter indicates size -->
+ <!-- followed by perf lock options -->
+ <param key="perf_lock_opts" value="4, 0x40400000, 0x1, 0x40C00000, 0x1"/>
+ <param key="native_audio_mode" value="src"/>
+ <param key="input_mic_max_count" value="4"/>
+ <param key="true_32_bit" value="true"/>
+ <!-- In the below value string, the value indicates sidetone gain in dB -->
+ <param key="usb_sidetone_gain" value="35"/>
+ <param key="hfp_pcm_dev_id" value="36"/>
+ </config_params>
+ <gain_db_to_level_mapping>
+ <gain_level_map db="-59" level="5"/>
+ <gain_level_map db="-17.4" level="4"/>
+ <gain_level_map db="-13.8" level="3"/>
+ <gain_level_map db="-10.2" level="2"/>
+ <gain_level_map db="0" level="1"/>
+ </gain_db_to_level_mapping>
+ <backend_names>
+ <device name="SND_DEVICE_OUT_HEADPHONES" backend="headphones" interface="SLIMBUS_6_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="SLIMBUS_6_RX"/>
+ <device name="SND_DEVICE_OUT_ANC_HEADSET" backend="headphones" interface="SLIMBUS_6_RX"/>
+ <device name="SND_DEVICE_OUT_ANC_FB_HEADSET" backend="headphones" interface="SLIMBUS_6_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES" backend="speaker-and-headphones" interface="SLIMBUS_0_RX-and-SLIMBUS_6_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_LINE" backend="speaker-and-headphones" interface="SLIMBUS_0_RX-and-SLIMBUS_6_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_ANC_HEADSET" backend="speaker-and-headphones" interface="SLIMBUS_0_RX-and-SLIMBUS_6_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_ANC_FB_HEADSET" backend="speaker-and-headphones" interface="SLIMBUS_0_RX-and-SLIMBUS_6_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_HEADPHONES" backend="headphones" interface="SLIMBUS_6_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_ANC_HEADSET" backend="headphones" interface="SLIMBUS_6_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_ANC_FB_HEADSET" backend="headphones" interface="SLIMBUS_6_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_LINE" backend="headphones" interface="SLIMBUS_6_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_TTY_FULL_HEADPHONES" backend="headphones" interface="SLIMBUS_6_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES" backend="headphones" interface="SLIMBUS_6_RX"/>
+ </backend_names>
+</audio_platform_info>
+
diff --git a/configs/msmpeafowl/audio_platform_info_i2s.xml b/configs/msmpeafowl/audio_platform_info_i2s.xml
new file mode 100644
index 0000000..5458b60
--- /dev/null
+++ b/configs/msmpeafowl/audio_platform_info_i2s.xml
@@ -0,0 +1,35 @@
+<?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, -->
+<!-- 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_i2s>
+ <device name="SND_DEVICE_IN_HANDSET_MIC" acdb_id="8" />
+ <device name="SND_DEVICE_IN_SPEAKER_MIC" acdb_id="8" />
+ <device name="SND_DEVICE_IN_VOICE_SPEAKER_MIC" acdb_id="8" />
+ <device name="SND_DEVICE_OUT_HANDSET" acdb_id="10" />
+ <device name="SND_DEVICE_OUT_VOICE_HANDSET" acdb_id="10" />
+ <device name="SND_DEVICE_OUT_SPEAKER" acdb_id="10" />
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER" acdb_id="10" />
+</audio_platform_info_i2s>
diff --git a/configs/msmpeafowl/audio_platform_info_intcodec.xml b/configs/msmpeafowl/audio_platform_info_intcodec.xml
new file mode 100644
index 0000000..7ef1e4c
--- /dev/null
+++ b/configs/msmpeafowl/audio_platform_info_intcodec.xml
@@ -0,0 +1,202 @@
+<?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, -->
+<!-- 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" />
+ </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="mono_speaker" value="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="4"/>
+ </config_params>
+ <acdb_ids>
+ <device name="SND_DEVICE_OUT_SPEAKER" acdb_id="15"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_PROTECTED" acdb_id="124"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED" acdb_id="101"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT" acdb_id="124"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT" acdb_id="101"/>
+ <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK" acdb_id="102"/>
+ <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" interface="INT4_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" interface="INT4_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="INT4_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" interface="INT4_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_PROTECTED" interface="INT4_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED" interface="INT4_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED" interface="INT4_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT" interface="INT4_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT" interface="INT4_MI2S_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT" interface="INT4_MI2S_RX"/>
+ <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/msmpeafowl/audio_policy.conf b/configs/msmpeafowl/audio_policy.conf
new file mode 100644
index 0000000..f275e16
--- /dev/null
+++ b/configs/msmpeafowl/audio_policy.conf
@@ -0,0 +1,148 @@
+# Global configuration section: lists input and output devices always present on the device
+# as well as the output device selected by default.
+# Devices are designated by a string that corresponds to the enum in audio.h
+
+global_configuration {
+ attached_output_devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_TELEPHONY_TX
+ default_output_device AUDIO_DEVICE_OUT_SPEAKER
+ attached_input_devices AUDIO_DEVICE_IN_BUILTIN_MIC|AUDIO_DEVICE_IN_BACK_MIC|AUDIO_DEVICE_IN_REMOTE_SUBMIX|AUDIO_DEVICE_IN_VOICE_CALL|AUDIO_DEVICE_IN_TELEPHONY_RX|AUDIO_DEVICE_IN_FM_TUNER
+}
+
+# audio hardware module section: contains descriptors for all audio hw modules present on the
+# device. Each hw module node is named after the corresponding hw module library base name.
+# For instance, "primary" corresponds to audio.primary.<device>.so.
+# The "primary" module is mandatory and must include at least one output with
+# AUDIO_OUTPUT_FLAG_PRIMARY flag.
+# Each module descriptor contains one or more output profile descriptors and zero or more
+# input profile descriptors. Each profile lists all the parameters supported by a given output
+# or input stream category.
+# The "channel_masks", "formats", "devices" and "flags" are specified using strings corresponding
+# to enums in audio.h and audio_policy.h. They are concatenated by use of "|" without space or "\n".
+
+audio_hw_modules {
+ primary {
+ outputs {
+ primary {
+ sampling_rates 44100|48000
+ channel_masks AUDIO_CHANNEL_OUT_STEREO
+ formats AUDIO_FORMAT_PCM_16_BIT
+ devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_FM|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ flags AUDIO_OUTPUT_FLAG_FAST|AUDIO_OUTPUT_FLAG_PRIMARY
+ }
+ raw {
+ sampling_rates 48000
+ channel_masks AUDIO_CHANNEL_OUT_STEREO
+ formats AUDIO_FORMAT_PCM_16_BIT
+ devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ flags AUDIO_OUTPUT_FLAG_FAST|AUDIO_OUTPUT_FLAG_RAW
+ }
+ deep_buffer {
+ sampling_rates 44100|48000
+ channel_masks AUDIO_CHANNEL_OUT_STEREO
+ formats AUDIO_FORMAT_PCM_16_BIT
+ devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_FM|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ flags AUDIO_OUTPUT_FLAG_DEEP_BUFFER
+ }
+ compress_passthrough {
+ sampling_rates dynamic
+ channel_masks dynamic
+ formats dynamic
+ devices AUDIO_DEVICE_OUT_AUX_DIGITAL
+ flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING
+ }
+ direct_pcm {
+ sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000|64000|88200|96000|176400|192000|352800|384000
+ channel_masks 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
+ formats AUDIO_FORMAT_PCM_16_BIT|AUDIO_FORMAT_PCM_24_BIT_PACKED|AUDIO_FORMAT_PCM_8_24_BIT|AUDIO_FORMAT_PCM_32_BIT
+ devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ flags AUDIO_OUTPUT_FLAG_DIRECT
+ }
+ compress_offload {
+ sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000|64000|88200|96000|176400|192000
+ channel_masks 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
+ formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_FLAC|AUDIO_FORMAT_ALAC|AUDIO_FORMAT_APE|AUDIO_FORMAT_AAC_LC|AUDIO_FORMAT_AAC_HE_V1|AUDIO_FORMAT_AAC_HE_V2|AUDIO_FORMAT_WMA|AUDIO_FORMAT_WMA_PRO|AUDIO_FORMAT_VORBIS|AUDIO_FORMAT_AAC_ADTS_LC|AUDIO_FORMAT_AAC_ADTS_HE_V1|AUDIO_FORMAT_AAC_ADTS_HE_V2
+ devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_PROXY|AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES|AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER
+ flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING
+ }
+ dsd_compress_passthrough {
+ sampling_rates 2822400|5644800
+ channel_masks AUDIO_CHANNEL_OUT_MONO|AUDIO_CHANNEL_OUT_STEREO
+ formats AUDIO_FORMAT_DSD
+ devices AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE
+ flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING
+ }
+ incall_music {
+ sampling_rates 8000|16000|48000
+ channel_masks AUDIO_CHANNEL_OUT_MONO
+ formats AUDIO_FORMAT_PCM_16_BIT
+ devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO
+ flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_INCALL_MUSIC
+ }
+ voip_rx {
+ sampling_rates 8000|16000|32000|48000
+ channel_masks AUDIO_CHANNEL_OUT_MONO
+ formats AUDIO_FORMAT_PCM_16_BIT|AUDIO_FORMAT_AMR_NB|AUDIO_FORMAT_AMR_WB|AUDIO_FORMAT_QCELP|AUDIO_FORMAT_EVRC|AUDIO_FORMAT_EVRCB|AUDIO_FORMAT_EVRCWB|AUDIO_FORMAT_EVRCNW
+ devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO
+ flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_VOIP_RX
+ }
+ }
+ inputs {
+ primary {
+ sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000
+ channel_masks AUDIO_CHANNEL_IN_MONO|AUDIO_CHANNEL_IN_STEREO|AUDIO_CHANNEL_IN_FRONT_BACK
+ formats AUDIO_FORMAT_PCM_16_BIT|AUDIO_FORMAT_AMR_NB|AUDIO_FORMAT_AMR_WB|AUDIO_FORMAT_QCELP|AUDIO_FORMAT_EVRC|AUDIO_FORMAT_EVRCB|AUDIO_FORMAT_EVRCWB|AUDIO_FORMAT_EVRCNW
+ devices AUDIO_DEVICE_IN_WIRED_HEADSET|AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET|AUDIO_DEVICE_IN_FM_TUNER|AUDIO_DEVICE_IN_VOICE_CALL|AUDIO_DEVICE_IN_USB_DEVICE
+ }
+ surround_sound {
+ sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000
+ channel_masks AUDIO_CHANNEL_IN_5POINT1|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_INDEX_MASK_6
+ formats AUDIO_FORMAT_PCM_16_BIT
+ devices AUDIO_DEVICE_IN_BUILTIN_MIC|AUDIO_DEVICE_IN_BACK_MIC
+ }
+ record_24 {
+ sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000|96000|192000
+ channel_masks AUDIO_CHANNEL_IN_MONO|AUDIO_CHANNEL_IN_STEREO|AUDIO_CHANNEL_IN_FRONT_BACK|AUDIO_CHANNEL_INDEX_MASK_3|AUDIO_CHANNEL_INDEX_MASK_4
+ formats AUDIO_FORMAT_PCM_24_BIT_PACKED|AUDIO_FORMAT_PCM_8_24_BIT
+ devices AUDIO_DEVICE_IN_BUILTIN_MIC|AUDIO_DEVICE_IN_BACK_MIC|AUDIO_DEVICE_IN_WIRED_HEADSET
+ }
+ }
+ }
+ a2dp {
+ inputs {
+ a2dp {
+ sampling_rates 44100|48000
+ channel_masks AUDIO_CHANNEL_IN_MONO|AUDIO_CHANNEL_IN_STEREO
+ formats AUDIO_FORMAT_PCM_16_BIT
+ devices AUDIO_DEVICE_IN_BLUETOOTH_A2DP
+ }
+ }
+ }
+ usb {
+ outputs {
+ usb_accessory {
+ sampling_rates 44100
+ channel_masks AUDIO_CHANNEL_OUT_STEREO
+ formats AUDIO_FORMAT_PCM_16_BIT
+ devices AUDIO_DEVICE_OUT_USB_ACCESSORY
+ }
+ }
+ }
+ r_submix {
+ outputs {
+ submix {
+ sampling_rates 48000
+ channel_masks AUDIO_CHANNEL_OUT_STEREO
+ formats AUDIO_FORMAT_PCM_16_BIT
+ devices AUDIO_DEVICE_OUT_REMOTE_SUBMIX
+ }
+ }
+ inputs {
+ submix {
+ sampling_rates 48000
+ channel_masks AUDIO_CHANNEL_IN_STEREO
+ formats AUDIO_FORMAT_PCM_16_BIT
+ devices AUDIO_DEVICE_IN_REMOTE_SUBMIX
+ }
+ }
+ }
+}
diff --git a/configs/msmpeafowl/audio_policy_configuration.xml b/configs/msmpeafowl/audio_policy_configuration.xml
new file mode 100644
index 0000000..09a4bb9
--- /dev/null
+++ b/configs/msmpeafowl/audio_policy_configuration.xml
@@ -0,0 +1,399 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!-- Copyright (c) 2016-2017, The Linux Foundation. All rights reserved
+ Not a Contribution.
+-->
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<audioPolicyConfiguration version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude">
+ <!-- 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:
+ There is one section per audio HW module present on the platform.
+ Each module section will contains two mandatory tags for audio HAL “halVersion” and “name”.
+ The module names are the same as in current .conf file:
+ “primary”, “A2DP”, “remote_submix”, “USB”
+ Each module will contain the following sections:
+ “devicePorts”: a list of device descriptors for all input and output devices accessible via this
+ module.
+ This contains both permanently attached devices and removable devices.
+ “mixPorts”: listing all output and input streams exposed by the audio HAL
+ “routes”: list of possible connections between input and output devices or between stream and
+ devices.
+ "route": is defined by an attribute:
+ -"type": <mux|mix> means all sources are mutual exclusive (mux) or can be mixed (mix)
+ -"sink": the sink involved in this route
+ -"sources": all the sources than can be connected to the sink via vis route
+ “attachedDevices”: permanently attached devices.
+ The attachedDevices section is a list of devices names. The names correspond to device names
+ defined in <devicePorts> section.
+ “defaultOutputDevice”: device to be used by default when no policy rule applies
+ -->
+ <modules>
+ <!-- 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>
+ </attachedDevices>
+ <defaultOutputDevice>Speaker</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="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"
+ samplingRates="dynamic" channelMasks="dynamic"/>
+ </mixPort>
+ <mixPort name="direct_pcm" role="source"
+ flags="AUDIO_OUTPUT_FLAG_DIRECT">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ 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_PCM_8_24_BIT"
+ samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000,128000,176400,192000,352800,384000"
+ 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_PCM_24_BIT_PACKED"
+ samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000,128000,176400,192000,352800,384000"
+ 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_PCM_32_BIT"
+ samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000,128000,176400,192000,352800,384000"
+ 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"/>
+ </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_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"/>
+ <profile name="" format="AUDIO_FORMAT_AAC_HE_V1"
+ samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
+ channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
+ <profile name="" format="AUDIO_FORMAT_AAC_HE_V2"
+ samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
+ channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
+ <profile name="" format="AUDIO_FORMAT_AC3"
+ 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_E_AC3"
+ 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_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"/>
+ <profile name="" format="AUDIO_FORMAT_AAC_ADTS_HE_V1"
+ samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
+ channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
+ <profile name="" format="AUDIO_FORMAT_AAC_ADTS_HE_V2"
+ 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>
+ </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"/>
+ </devicePort>
+ <devicePort tagName="BT A2DP Headphones" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES" role="sink">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </devicePort>
+ <devicePort tagName="BT A2DP Speaker" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER" role="sink">
+ <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"/>
+ <route type="mix" sink="Speaker"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
+ <route type="mix" sink="Wired Headset"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,dsd_compress_passthrough,voip_rx"/>
+ <route type="mix" sink="Wired Headphones"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,dsd_compress_passthrough,voip_rx"/>
+ <route type="mix" sink="Line"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,dsd_compress_passthrough,voip_rx"/>
+ <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"/>
+ <route type="mix" sink="USB Device Out"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
+ <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="Built-In Mic,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="BT A2DP Out"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload"/>
+ <route type="mix" sink="BT A2DP Headphones"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload"/>
+ <route type="mix" sink="BT A2DP Speaker"
+ sources="primary output,raw,deep_buffer,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 -->
+
+ <!-- Volume section -->
+
+ <xi:include href="/vendor/etc/audio_policy_volumes.xml"/>
+ <xi:include href="/vendor/etc/default_volume_tables.xml"/>
+
+ <!-- End of Volume section -->
+
+</audioPolicyConfiguration>
diff --git a/configs/msmpeafowl/audio_tuning_mixer.txt b/configs/msmpeafowl/audio_tuning_mixer.txt
new file mode 100644
index 0000000..fd48369
--- /dev/null
+++ b/configs/msmpeafowl/audio_tuning_mixer.txt
@@ -0,0 +1,41 @@
+#RAS_TEST_SPKR_PHONE_SPKR_STEREO
+acdb_dev_id:136
+!Playback
+Rxdevice:0
+
+enable
+INT4_MI2S_RX Channels:Two
+RX4 MIX1 INP1:RX4
+RX5 MIX1 INP1:RX5
+COMP1 Switch:1
+COMP2 Switch:1
+SpkrLeft COMP Switch:1
+SpkrLeft BOOST Switch:1
+SpkrLeft VISENSE Switch:1
+SpkrLeft SWR DAC_Port Switch:1
+SpkrRight COMP Switch:1
+SpkrRight BOOST Switch:1
+SpkrRight VISENSE Switch:1
+SpkrRight SWR DAC_Port Switch:1
+SpkrLeft WSA PA Mute:0
+SpkrRight WSA PA Mute:0
+INT4_MI2S_RX Audio Mixer MultiMedia1:1
+
+disable
+INT4_MI2S_RX Channels:One
+RX4 MIX1 INP1:ZERO
+RX5 MIX1 INP1:ZERO
+COMP1 Switch:0
+COMP2 Switch:0
+SpkrLeft COMP Switch:0
+SpkrLeft BOOST Switch:0
+SpkrLeft VISENSE Switch:0
+SpkrLeft SWR DAC_Port Switch:0
+SpkrRight COMP Switch:0
+SpkrRight BOOST Switch:0
+SpkrRight VISENSE Switch:0
+SpkrRight SWR DAC_Port Switch:0
+SpkrLeft WSA PA Mute:0
+SpkrRight WSA PA Mute:0
+INT4_MI2S_RX Audio Mixer MultiMedia1:0
+
diff --git a/configs/msmpeafowl/audio_tuning_mixer_tasha.txt b/configs/msmpeafowl/audio_tuning_mixer_tasha.txt
new file mode 100644
index 0000000..e992c76
--- /dev/null
+++ b/configs/msmpeafowl/audio_tuning_mixer_tasha.txt
@@ -0,0 +1,192 @@
+#ANC_TEST_P_PATH_MIC_STEREO Capture
+acdb_dev_id:85
+!Capture
+Txdevice:0
+
+enable
+AIF1_CAP Mixer SLIM TX7:1
+AIF1_CAP Mixer SLIM TX8:1
+SLIM TX7 MUX:DEC7
+ADC MUX7:DMIC
+DMIC MUX7:DMIC4
+SLIM TX8 MUX:DEC8
+ADC MUX8:DMIC
+DMIC MUX8:DMIC0
+SLIM_0_TX Channels:Two
+MultiMedia1 Mixer SLIM_0_TX:1
+
+disable
+MultiMedia1 Mixer SLIM_0_TX:0
+AIF1_CAP Mixer SLIM TX7:0
+AIF1_CAP Mixer SLIM TX8:0
+SLIM TX7 MUX:ZERO
+SLIM TX8 MUX:ZERO
+DMIC MUX7:ZERO
+DMIC MUX8:ZERO
+
+#ANC_TEST_S_PATH_MIC_STEREO Capture
+acdb_dev_id:88
+!Capture
+Txdevice:0
+
+enable
+AIF1_CAP Mixer SLIM TX7:1
+AIF1_CAP Mixer SLIM TX8:1
+SLIM TX7 MUX:DEC7
+ADC MUX7:ANC_FB_TUNE1
+ADC MUX10:DMIC
+DMIC MUX10:DMIC0
+SLIM TX8 MUX:DEC8
+ADC MUX8:ANC_FB_TUNE2
+ADC MUX12:DMIC
+DMIC MUX12:DMIC0
+ANC0 FB MUX:ANC_IN_EAR_SPKR
+ANC OUT EAR SPKR Enable Switch:1
+SLIM_0_TX Channels:Two
+MultiMedia1 Mixer SLIM_0_TX:1
+
+disable
+MultiMedia1 Mixer SLIM_0_TX:0
+AIF1_CAP Mixer SLIM TX7:0
+AIF1_CAP Mixer SLIM TX8:0
+SLIM TX7 MUX:ZERO
+SLIM TX8 MUX:ZERO
+ADC MUX7:DMIC
+ADC MUX8:DMIC
+DMIC MUX10:ZERO
+DMIC MUX12:ZERO
+ANC0 FB MUX:ZERO
+ANC OUT EAR SPKR Enable Switch:0
+
+
+#ANC_TEST_E_PATH_MIC_STEREO Capture
+acdb_dev_id:91
+!Capture
+Txdevice:0
+
+enable
+AIF1_CAP Mixer SLIM TX7:1
+AIF1_CAP Mixer SLIM TX8:1
+SLIM TX7 MUX:DEC7
+ADC MUX7:ANC_FB_TUNE1
+ADC MUX10:DMIC
+DMIC MUX10:DMIC4
+SLIM TX8 MUX:DEC8
+ADC MUX8:ANC_FB_TUNE2
+ADC MUX12:DMIC
+DMIC MUX12:DMIC4
+ANC0 FB MUX:ANC_IN_EAR_SPKR
+ANC OUT EAR SPKR Enable Switch:1
+SLIM_0_TX Channels:Two
+MultiMedia1 Mixer SLIM_0_TX:1
+
+disable
+MultiMedia1 Mixer SLIM_0_TX:0
+AIF1_CAP Mixer SLIM TX7:0
+AIF1_CAP Mixer SLIM TX8:0
+SLIM TX7 MUX:ZERO
+SLIM TX8 MUX:ZERO
+ADC MUX7:DMIC
+ADC MUX8:DMIC
+DMIC MUX10:ZERO
+DMIC MUX12:ZERO
+ANC0 FB MUX:ZERO
+ANC OUT EAR SPKR Enable Switch:0
+
+
+#ANC_TEST_S_PATH_HANDSET_SPKR_ANC_MONO
+acdb_dev_id:86
+!Playback
+Rxdevice:0
+
+enable
+ANC Function:ON
+SLIM RX0 MUX:AIF_MIX1_PB
+SLIM_0_RX Channels:One
+RX INT7_1 MIX1 INP0:RX0
+SpkrLeft SWR DAC_Port Switch:1
+ANC Slot:7
+ANC OUT EAR SPKR Enable Switch:1
+ANC SPKR PA Enable Switch:1
+SpkrLeft WSA PA Gain:G_6_DB
+SLIMBUS_0_RX Audio Mixer MultiMedia1:1
+
+disable
+SLIMBUS_0_RX Audio Mixer MultiMedia1:0
+SpkrLeft WSA PA Gain:G_0_DB
+ANC SPKR PA Enable Switch:0
+ANC OUT EAR SPKR Enable Switch:0
+SpkrLeft SWR DAC_Port Switch:0
+ANC Slot:0
+SLIM RX0 MUX:ZERO
+RX INT7_1 MIX1 INP0:ZERO
+ANC Function:OFF
+
+#ANC_TEST_E_PATH_HANDSET_SPKR_ANC_MONO
+acdb_dev_id:89
+!Playback
+Rxdevice:0
+
+enable
+ANC Function:ON
+SLIM RX0 MUX:AIF_MIX1_PB
+SLIM_0_RX Channels:One
+RX INT7_1 MIX1 INP0:RX0
+SpkrLeft SWR DAC_Port Switch:1
+ANC Slot:8
+ANC OUT EAR SPKR Enable Switch:1
+ANC SPKR PA Enable Switch:1
+SpkrLeft WSA PA Gain:G_6_DB
+SLIMBUS_0_RX Audio Mixer MultiMedia1:1
+
+disable
+SLIMBUS_0_RX Audio Mixer MultiMedia1:0
+SpkrLeft WSA PA Gain:G_0_DB
+ANC SPKR PA Enable Switch:0
+ANC OUT EAR SPKR Enable Switch:0
+SpkrLeft SWR DAC_Port Switch:0
+ANC Slot:0
+SLIM RX0 MUX:ZERO
+RX INT7_1 MIX1 INP0:ZERO
+ANC Function:OFF
+
+#RAS_TEST_SPKR_PHONE_SPKR_STEREO
+acdb_dev_id:136
+!Playback
+Rxdevice:0
+
+enable
+SLIM RX0 MUX:AIF_MIX1_PB
+SLIM RX1 MUX:AIF_MIX1_PB
+SLIM_0_RX Channels:Two
+RX INT7_1 MIX1 INP0:RX0
+RX INT8_1 MIX1 INP0:RX1
+COMP7 Switch:1
+COMP8 Switch:1
+SpkrLeft COMP Switch:1
+SpkrRight COMP Switch:1
+SpkrLeft BOOST Switch:1
+SpkrRight BOOST Switch:1
+SpkrLeft VISENSE Switch:1
+SpkrRight VISENSE Switch:1
+SpkrLeft SWR DAC_Port Switch:1
+SpkrRight SWR DAC_Port Switch:1
+SLIMBUS_0_RX Audio Mixer MultiMedia1:1
+
+disable
+SLIM RX0 MUX:ZERO
+SLIM RX1 MUX:ZERO
+RX INT7_1 MIX1 INP0:ZERO
+RX INT8_1 MIX1 INP0:ZERO
+COMP7 Switch:0
+COMP8 Switch:0
+SpkrLeft COMP Switch:0
+SpkrRight COMP Switch:0
+SpkrLeft BOOST Switch:0
+SpkrRight BOOST Switch:0
+SpkrLeft VISENSE Switch:0
+SpkrRight VISENSE Switch:0
+SpkrLeft SWR DAC_Port Switch:0
+SpkrRight SWR DAC_Port Switch:0
+SLIMBUS_0_RX Audio Mixer MultiMedia1:0
+
diff --git a/configs/msmpeafowl/audio_tuning_mixer_tavil.txt b/configs/msmpeafowl/audio_tuning_mixer_tavil.txt
new file mode 100644
index 0000000..6c1c864
--- /dev/null
+++ b/configs/msmpeafowl/audio_tuning_mixer_tavil.txt
@@ -0,0 +1,193 @@
+#ANC_TEST_P_PATH_MIC_STEREO Capture
+acdb_dev_id:85
+!Capture
+Txdevice:0
+
+enable
+AIF1_CAP Mixer SLIM TX7:1
+AIF1_CAP Mixer SLIM TX8:1
+CDC_IF TX7 MUX:DEC7
+ADC MUX7:DMIC
+DMIC MUX7:DMIC4
+CDC_IF TX8 MUX:DEC8
+ADC MUX8:DMIC
+DMIC MUX8:DMIC0
+SLIM_0_TX Channels:Two
+MultiMedia1 Mixer SLIM_0_TX:1
+
+disable
+MultiMedia1 Mixer SLIM_0_TX:0
+AIF1_CAP Mixer SLIM TX7:0
+AIF1_CAP Mixer SLIM TX8:0
+CDC_IF TX7 MUX:ZERO
+CDC_IF TX8 MUX:ZERO
+DMIC MUX7:ZERO
+DMIC MUX8:ZERO
+
+#ANC_TEST_S_PATH_MIC_STEREO Capture
+acdb_dev_id:88
+!Capture
+Txdevice:0
+
+enable
+AIF1_CAP Mixer SLIM TX7:1
+AIF1_CAP Mixer SLIM TX8:1
+CDC_IF TX7 MUX:DEC7
+ADC MUX7:ANC_FB_TUNE1
+ADC MUX10:DMIC
+DMIC MUX10:DMIC0
+CDC_IF TX8 MUX:DEC8
+ADC MUX8:ANC_FB_TUNE2
+ADC MUX12:DMIC
+DMIC MUX12:DMIC0
+ANC0 FB MUX:ANC_IN_EAR_SPKR
+ANC OUT EAR SPKR Enable Switch:1
+SLIM_0_TX Channels:Two
+MultiMedia1 Mixer SLIM_0_TX:1
+
+disable
+MultiMedia1 Mixer SLIM_0_TX:0
+AIF1_CAP Mixer SLIM TX7:0
+AIF1_CAP Mixer SLIM TX8:0
+CDC_IF TX7 MUX:ZERO
+CDC_IF TX8 MUX:ZERO
+ADC MUX7:DMIC
+ADC MUX8:DMIC
+DMIC MUX10:ZERO
+DMIC MUX12:ZERO
+ANC0 FB MUX:ZERO
+ANC OUT EAR SPKR Enable Switch:0
+
+
+#ANC_TEST_E_PATH_MIC_STEREO Capture
+acdb_dev_id:91
+!Capture
+Txdevice:0
+
+enable
+AIF1_CAP Mixer SLIM TX7:1
+AIF1_CAP Mixer SLIM TX8:1
+CDC_IF TX7 MUX:DEC7
+ADC MUX7:ANC_FB_TUNE1
+ADC MUX10:DMIC
+DMIC MUX10:DMIC4
+CDC_IF TX8 MUX:DEC8
+ADC MUX8:ANC_FB_TUNE2
+ADC MUX12:DMIC
+DMIC MUX12:DMIC4
+ANC0 FB MUX:ANC_IN_EAR_SPKR
+ANC OUT EAR SPKR Enable Switch:1
+SLIM_0_TX Channels:Two
+MultiMedia1 Mixer SLIM_0_TX:1
+
+disable
+MultiMedia1 Mixer SLIM_0_TX:0
+AIF1_CAP Mixer SLIM TX7:0
+AIF1_CAP Mixer SLIM TX8:0
+CDC_IF TX7 MUX:ZERO
+CDC_IF TX8 MUX:ZERO
+ADC MUX7:DMIC
+ADC MUX8:DMIC
+DMIC MUX10:ZERO
+DMIC MUX12:ZERO
+ANC0 FB MUX:ZERO
+ANC OUT EAR SPKR Enable Switch:0
+
+
+#ANC_TEST_S_PATH_HANDSET_SPKR_ANC_MONO
+acdb_dev_id:86
+!Playback
+Rxdevice:0
+
+enable
+ANC Function:ON
+SLIM RX0 MUX:AIF1_PB
+SLIM_0_RX Channels:One
+RX INT7_1 MIX1 INP0:RX0
+SpkrLeft SWR DAC_Port Switch:1
+ANC Slot:7
+ANC OUT EAR SPKR Enable Switch:1
+ANC SPKR PA Enable Switch:1
+SpkrLeft WSA PA Gain:G_6_DB
+SLIMBUS_0_RX Audio Mixer MultiMedia1:1
+
+disable
+SLIMBUS_0_RX Audio Mixer MultiMedia1:0
+SpkrLeft WSA PA Gain:G_0_DB
+ANC SPKR PA Enable Switch:0
+ANC OUT EAR SPKR Enable Switch:0
+SpkrLeft SWR DAC_Port Switch:0
+ANC Slot:0
+SLIM RX0 MUX:ZERO
+RX INT7_1 MIX1 INP0:ZERO
+ANC Function:OFF
+
+#ANC_TEST_E_PATH_HANDSET_SPKR_ANC_MONO
+acdb_dev_id:89
+!Playback
+Rxdevice:0
+
+enable
+ANC Function:ON
+SLIM RX0 MUX:AIF1_PB
+SLIM_0_RX Channels:One
+RX INT7_1 MIX1 INP0:RX0
+SpkrLeft SWR DAC_Port Switch:1
+ANC Slot:8
+ANC OUT EAR SPKR Enable Switch:1
+ANC SPKR PA Enable Switch:1
+SpkrLeft WSA PA Gain:G_6_DB
+SLIMBUS_0_RX Audio Mixer MultiMedia1:1
+
+disable
+SLIMBUS_0_RX Audio Mixer MultiMedia1:0
+SpkrLeft WSA PA Gain:G_0_DB
+ANC SPKR PA Enable Switch:0
+ANC OUT EAR SPKR Enable Switch:0
+SpkrLeft SWR DAC_Port Switch:0
+ANC Slot:0
+SLIM RX0 MUX:ZERO
+RX INT7_1 MIX1 INP0:ZERO
+ANC Function:OFF
+
+#RAS_TEST_SPKR_PHONE_SPKR_STEREO
+acdb_dev_id:136
+!Playback
+Rxdevice:0
+
+enable
+SLIM RX0 MUX:AIF1_PB
+SLIM RX1 MUX:AIF1_PB
+CDC_IF RX0 MUX:SLIM RX0
+CDC_IF RX1 MUX:SLIM RX1
+SLIM_0_RX Channels:Two
+RX INT7_1 MIX1 INP0:RX0
+RX INT8_1 MIX1 INP0:RX1
+COMP7 Switch:1
+COMP8 Switch:1
+SpkrLeft COMP Switch:1
+SpkrRight COMP Switch:1
+SpkrLeft BOOST Switch:1
+SpkrRight BOOST Switch:1
+SpkrLeft VISENSE Switch:1
+SpkrRight VISENSE Switch:1
+SpkrLeft SWR DAC_Port Switch:1
+SpkrRight SWR DAC_Port Switch:1
+SLIMBUS_0_RX Audio Mixer MultiMedia1:1
+
+disable
+SLIM RX0 MUX:ZERO
+SLIM RX1 MUX:ZERO
+RX INT7_1 MIX1 INP0:ZERO
+RX INT8_1 MIX1 INP0:ZERO
+COMP7 Switch:0
+COMP8 Switch:0
+SpkrLeft COMP Switch:0
+SpkrRight COMP Switch:0
+SpkrLeft BOOST Switch:0
+SpkrRight BOOST Switch:0
+SpkrLeft VISENSE Switch:0
+SpkrRight VISENSE Switch:0
+SpkrLeft SWR DAC_Port Switch:0
+SpkrRight SWR DAC_Port Switch:0
+SLIMBUS_0_RX Audio Mixer MultiMedia1:0
diff --git a/configs/msmpeafowl/graphite_ipc_platform_info.xml b/configs/msmpeafowl/graphite_ipc_platform_info.xml
new file mode 100644
index 0000000..a965148
--- /dev/null
+++ b/configs/msmpeafowl/graphite_ipc_platform_info.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--- Copyright (c) 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. -->
+<graphite_ipc_platform_info>
+ <no_of_glink_channels value="4">
+ </no_of_glink_channels>
+ <!-- channel 1 configuration -->
+ <glink_channel name="g_glink_ctrl" latency_in_us="5000"
+ no_of_intents="1" intents_size="1024">
+ </glink_channel>
+ <!-- channel 2 configuration -->
+ <glink_channel name="g_glink_persistent_data_ild" latency_in_us="30000"
+ no_of_intents="0">
+ </glink_channel>
+ <!-- channel 3 configuration -->
+ <glink_channel name="g_glink_persistent_data_nild" latency_in_us="30000"
+ no_of_intents="0">
+ </glink_channel>
+ <!-- channel 4 configuration -->
+ <glink_channel name="g_glink_audio_data" latency_in_us="10000"
+ no_of_intents="2" intents_size="4096, 4096">
+ </glink_channel>
+</graphite_ipc_platform_info>
diff --git a/configs/msmpeafowl/listen_platform_info.xml b/configs/msmpeafowl/listen_platform_info.xml
new file mode 100644
index 0000000..1581ea4
--- /dev/null
+++ b/configs/msmpeafowl/listen_platform_info.xml
@@ -0,0 +1,42 @@
+<?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. -->
+<listen_platform_info>
+ <device name="DEVICE_HANDSET_APE_ACDB_ID" acdb_id="100" />
+ <device name="DEVICE_HANDSET_CPE_ACDB_ID" acdb_id="128" />
+ <ctrl name="execution_type" value="CPE" /> <!-- value: "CPE" "APE" -->
+ <ctrl name="max_cpe_sessions" value="1" />
+ <ctrl name="max_cpe_keywords" value="6" />
+ <ctrl name="max_cpe_kw_user_pairs" value="6" />
+ <ctrl name="max_ape_sessions" value="8" />
+ <ctrl name="max_ape_keywords" value="10" />
+ <ctrl name="max_ape_kw_user_pairs" value="10" />
+ <ctrl name="dump_lab_data" value="false" /> <!-- value: "true" "false" -->
+ <!-- If value is true, it requires write permissions to /data folder to -->
+ <!-- dump lab data to file under /data/LHAL foloder. Do "chmod 777 /data/" -->
+</listen_platform_info>
+
diff --git a/configs/msmpeafowl/mixer_paths.xml b/configs/msmpeafowl/mixer_paths.xml
new file mode 100644
index 0000000..1b07f80
--- /dev/null
+++ b/configs/msmpeafowl/mixer_paths.xml
@@ -0,0 +1,2259 @@
+<?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, -->
+<!-- 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="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="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="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" />
+ <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="SpkrRight WSA PA Gain" value="G_0_DB" />
+ <ctl name="SpkrLeft WSA PA Mute" value="1" />
+ <ctl name="SpkrRight WSA PA Mute" value="1" />
+ <ctl name="EAR SPKR PA Gain" value="G_DEFAULT" />
+
+ <!-- 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="ENABLE" />
+
+ <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" />
+
+ <!-- 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 -->
+
+ <!-- vbat related data -->
+ <!-- vbat related data end -->
+
+ <!-- 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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>
+
+ <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" />
+ </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="Two" />
+ <ctl name="RX4 MIX1 INP1" value="RX4" />
+ <ctl name="RX5 MIX1 INP1" value="RX5" />
+ <ctl name="COMP1 Switch" value="1" />
+ <ctl name="COMP2 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="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="SpkrLeft WSA PA Mute" value="0" />
+ <ctl name="SpkrRight 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" />
+ <ctl name="AIF1_VI_SDW Mixer SPKR_VI_2" value="1" />
+ <path name="speaker" />
+ <ctl name="VI_FEED_TX Channels" value="Two" />
+ <ctl name="INT4_MI2S_RX_VI_FB_STEREO_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="EAR SPKR PA Gain" value="G_3_DB" />
+ <path name="speaker-mono" />
+ </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">
+ <ctl name="INT3_MI2S_TX Channels" value="Three" />
+ <ctl name="DEC1 MUX" value="DMIC1" />
+ <ctl name="DEC2 MUX" value="DMIC3" />
+ <ctl name="DEC3 MUX" value="DMIC4" />
+ <ctl name="I2S TX2 INP1" value="DEC3" />
+ </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="DEC1 MUX" value="DMIC3" />
+ <ctl name="DEC2 MUX" value="DMIC4" />
+ <ctl name="INT3_MI2S_TX Channels" value="Two" />
+ </path>
+
+ <path name="speaker-dmic-endfire">
+ <ctl name="DEC1 MUX" value="DMIC2" />
+ <ctl name="DEC2 MUX" value="DMIC4" />
+ <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="DEC1 MUX" value="DMIC2" />
+ <ctl name="DEC2 MUX" value="DMIC3" />
+ </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">
+ <ctl name="INT3_MI2S_TX Channels" value="Four" />
+ <ctl name="DEC1 MUX" value="DMIC2" />
+ <ctl name="DEC2 MUX" value="DMIC1" />
+ <ctl name="DEC3 MUX" value="DMIC3" />
+ <ctl name="I2S TX2 INP1" value="DEC3" />
+ <ctl name="DEC4 MUX" value="DMIC4" />
+ <ctl name="I2S TX2 INP2" value="DEC4" />
+ </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="adc1" />
+ </path>
+
+ <path name="unprocessed-handset-mic">
+ <path name="handset-mic" />
+ </path>
+
+ <path name="unprocessed-mic">
+ <path name="unprocessed-handset-mic" />
+ </path>
+
+ <!-- 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/msmpeafowl/mixer_paths_i2s.xml b/configs/msmpeafowl/mixer_paths_i2s.xml
new file mode 100644
index 0000000..bcf433b
--- /dev/null
+++ b/configs/msmpeafowl/mixer_paths_i2s.xml
@@ -0,0 +1,238 @@
+<?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, -->
+<!-- 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="HPHL Volume" value="97" />
+ <ctl name="HPHR Volume" value="97" />
+ <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="ADC2 Volume" value="19" />
+ <ctl name="DEC5 Volume" value="84" />
+ <ctl name="DEC10 Volume" value="84" />
+ <ctl name="COMP0 Switch" value="0" />
+ <ctl name="COMP1 Switch" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia1" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia5" value="0" />
+ <ctl name="MultiMedia1 Mixer AUX_PCM_UL_TX" value="0" />
+ <ctl name="MultiMedia8 Mixer AUX_PCM_UL_TX" value="0" />
+ <ctl name="IIR1 INP1 MUX" value="ZERO" />
+ <ctl name="SLIM TX9 MUX" value="ZERO" />
+ <ctl name="DEC10 MUX" value="ZERO" />
+ <ctl name="DEC5 MUX" value="ZERO" />
+ <ctl name="RX2 MIX2 INP1" value="ZERO" />
+ <ctl name="RX1 MIX2 INP1" value="ZERO" />
+ <ctl name="RX7 MIX1 INP1" value="ZERO" />
+ <ctl name="RX2 MIX1 INP2" value="ZERO" />
+ <ctl name="RX2 MIX1 INP1" value="ZERO" />
+ <ctl name="RX1 MIX1 INP1" value="ZERO" />
+ <ctl name="HPHL DAC Switch" value="0" />
+ <ctl name="QUAT_MI2S_RX Channels" value="One" />
+ <ctl name="QUAT_MI2S_TX Channels" value="One" />
+ <ctl name="SLIM RX4 MUX" value="AIF1_PB" />
+ <ctl name="SLIM RX3 MUX" value="AIF1_PB" />
+ <ctl name="CLASS_H_DSM MUX" value="ZERO" />
+
+ <!-- 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 -->
+
+ <!-- These are audio route (FE to BE) specific mixer settings -->
+ <path name="deep-buffer-playback">
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia1" value="1" />
+ </path>
+
+ <path name="low-latency-playback">
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia5" value="1" />
+ </path>
+
+ <path name="compress-offload-playback">
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia4" value="1" />
+ </path>
+
+ <path name="audio-record">
+ <ctl name="MultiMedia1 Mixer AUX_PCM_UL_TX" value="1" />
+ </path>
+
+ <path name="audio-record-compress">
+ <ctl name="MultiMedia8 Mixer AUX_PCM_UL_TX" value="1" />
+ </path>
+
+ <!-- These are actual sound device specific mixer settings -->
+ <path name="adc1">
+ <ctl name="AIF1_CAP Mixer SLIM TX9" value="1"/>
+ <ctl name="QUAT_MI2S_TX Channels" value="One" />
+ <ctl name="SLIM TX9 MUX" value="DEC5" />
+ <ctl name="DEC5 MUX" value="ADC2" />
+ </path>
+
+ <path name="adc2">
+ <ctl name="AIF1_CAP Mixer SLIM TX9" value="1"/>
+ <ctl name="QUAT_MI2S_TX Channels" value="One" />
+ <ctl name="SLIM TX9 MUX" value="DEC5" />
+ <ctl name="DEC5 MUX" value="ADC2" />
+ </path>
+
+ <path name="dmic1">
+ <ctl name="AIF1_CAP Mixer SLIM TX9" value="1"/>
+ <ctl name="QUAT_MI2S_TX Channels" value="One" />
+ <ctl name="SLIM TX9 MUX" value="DEC10" />
+ <ctl name="DEC10 MUX" value="DMIC3" />
+ </path>
+
+ <path name="speaker">
+ <ctl name="SLIM RX3 MUX" value="AIF1_PB" />
+ <ctl name="SLIM RX4 MUX" value="AIF1_PB" />
+ <ctl name="QUAT_MI2S_RX Channels" value="Two" />
+ <ctl name="RX1 MIX1 INP1" value="RX3" />
+ <ctl name="RX2 MIX1 INP1" value="RX4" />
+ <ctl name="CLASS_H_DSM MUX" value="DSM_HPHL_RX1" />
+ <ctl name="HPHL DAC Switch" value="1" />
+ <ctl name="COMP1 Switch" value="1" />
+ </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="IIR1 INP1 Volume" value="77" />
+ <ctl name="RX1 MIX2 INP1" value="IIR1" />
+ <ctl name="RX2 MIX2 INP1" value="IIR1" />
+ </path>
+
+ <path name="sidetone-handset">
+ <path name="sidetone-iir" />
+ <ctl name="IIR1 INP1 Volume" value="62" />
+ <ctl name="RX1 MIX2 INP1" value="IIR1" />
+ </path>
+
+ <path name="speaker-mic">
+ <path name="dmic1" />
+ </path>
+
+ <path name="handset">
+ <ctl name="SLIM RX3 MUX" value="AIF1_PB" />
+ <ctl name="SLIM RX4 MUX" value="AIF1_PB" />
+ <ctl name="QUAT_MI2S_RX Channels" value="Two" />
+ <ctl name="RX1 MIX1 INP1" value="RX3" />
+ <ctl name="RX2 MIX1 INP1" value="RX4" />
+ <ctl name="CLASS_H_DSM MUX" value="DSM_HPHL_RX1" />
+ <ctl name="HPHL DAC Switch" value="1" />
+ <ctl name="COMP1 Switch" value="1" />
+ </path>
+
+ <path name="handset-mic">
+ <path name="adc2" />
+ </path>
+
+ <path name="headphones">
+ <ctl name="SLIM RX3 MUX" value="AIF1_PB" />
+ <ctl name="SLIM RX4 MUX" value="AIF1_PB" />
+ <ctl name="QUAT_MI2S_RX Channels" value="Two" />
+ <ctl name="RX1 MIX1 INP1" value="RX3" />
+ <ctl name="RX2 MIX1 INP1" value="RX4" />
+ <ctl name="CLASS_H_DSM MUX" value="DSM_HPHL_RX1" />
+ <ctl name="HPHL DAC Switch" value="1" />
+ <ctl name="COMP1 Switch" value="1" />
+ </path>
+
+ <path name="line">
+ <path name="headphones" />
+ </path>
+
+ <path name="headset-mic">
+ <path name="adc2" />
+ <ctl name="ADC2 Volume" value="13" />
+ </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" />
+ </path>
+
+ <path name="voice-speaker-mic">
+ <path name="speaker-mic" />
+ </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 name="sidetone-headphones" />
+ <ctl name="ADC2 Volume" value="13" />
+ </path>
+
+ <path name="speaker-and-headphones">
+ <path name="headphones" />
+ <ctl name="RX7 MIX1 INP1" value="RX1" />
+ <ctl name="COMP0 Switch" value="1" />
+ </path>
+
+ <path name="speaker-and-line">
+ <path name="speaker-and-headphones" />
+ </path>
+
+ <path name="voice-rec-mic">
+ <path name="handset-mic" />
+ </path>
+
+ <path name="camcorder-mic">
+ <path name="handset-mic" />
+ </path>
+
+</mixer>
diff --git a/configs/msmpeafowl/mixer_paths_mtp.xml b/configs/msmpeafowl/mixer_paths_mtp.xml
new file mode 100644
index 0000000..145a1dd
--- /dev/null
+++ b/configs/msmpeafowl/mixer_paths_mtp.xml
@@ -0,0 +1,2122 @@
+<?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, -->
+<!-- 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="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="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 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 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="SpkrRight WSA PA Gain" value="G_0_DB" />
+ <ctl name="SpkrLeft WSA PA Mute" value="1" />
+ <ctl name="SpkrRight WSA PA Mute" value="1" />
+ <ctl name="EAR SPKR PA Gain" value="G_DEFAULT" />
+
+ <!-- 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="ENABLE" />
+
+ <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" />
+
+ <!-- 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">
+ <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 speaker-protected">
+ <path name="deep-buffer-playback" />
+ </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 speaker-protected">
+ <path name="low-latency-playback" />
+ </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 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 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 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 speaker-protected">
+ <path name="compress-offload-playback" />
+ </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 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 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 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 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 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 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 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 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 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="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 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 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="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 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 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="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" />
+ </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="Two" />
+ <ctl name="RX4 MIX1 INP1" value="RX4" />
+ <ctl name="RX5 MIX1 INP1" value="RX5" />
+ <ctl name="COMP1 Switch" value="1" />
+ <ctl name="COMP2 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="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="SpkrLeft WSA PA Mute" value="0" />
+ <ctl name="SpkrRight 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="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="dmic2" />
+ </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" />
+ <ctl name="AIF1_VI_SDW Mixer SPKR_VI_2" value="1" />
+ <path name="speaker" />
+ <ctl name="VI_FEED_TX Channels" value="Two" />
+ <ctl name="INT4_MI2S_RX_VI_FB_STEREO_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="handset">
+ <ctl name="EAR SPKR PA Gain" value="G_6_DB" />
+ <path name="speaker-mono" />
+ </path>
+
+ <path name="handset-mic">
+ <path name="dmic3" />
+ </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">
+ <ctl name="INT3_MI2S_TX Channels" value="Three" />
+ <ctl name="DEC1 MUX" value="DMIC1" />
+ <ctl name="DEC2 MUX" value="DMIC3" />
+ <ctl name="DEC3 MUX" value="DMIC4" />
+ <ctl name="I2S TX2 INP1" value="DEC3" />
+ </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" />
+ </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-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="DEC1 MUX" value="DMIC3" />
+ <ctl name="DEC2 MUX" value="DMIC4" />
+ <ctl name="INT3_MI2S_TX Channels" value="Two" />
+ </path>
+
+ <path name="speaker-dmic-endfire">
+ <ctl name="DEC1 MUX" value="DMIC2" />
+ <ctl name="DEC2 MUX" value="DMIC4" />
+ <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="DEC1 MUX" value="DMIC2" />
+ <ctl name="DEC2 MUX" value="DMIC3" />
+ </path>
+
+ <path name="dmic-broadside">
+ <path name="speaker-dmic-broadside" />
+ <ctl name="IIR1 INP1 MUX" value="DEC7" />
+ </path>
+
+ <path name="voice-speaker-dmic-broadside">
+ <path name="dmic-broadside" />
+ </path>
+
+ <!-- Quad MIC devices -->
+ <path name="speaker-qmic">
+ <ctl name="INT3_MI2S_TX Channels" value="Four" />
+ <ctl name="DEC1 MUX" value="DMIC2" />
+ <ctl name="DEC2 MUX" value="DMIC1" />
+ <ctl name="DEC3 MUX" value="DMIC3" />
+ <ctl name="I2S TX2 INP1" value="DEC3" />
+ <ctl name="DEC4 MUX" value="DMIC4" />
+ <ctl name="I2S TX2 INP2" value="DEC4" />
+ </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="dmic1" />
+ </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/msmpeafowl/mixer_paths_tasha.xml b/configs/msmpeafowl/mixer_paths_tasha.xml
new file mode 100644
index 0000000..2971282
--- /dev/null
+++ b/configs/msmpeafowl/mixer_paths_tasha.xml
@@ -0,0 +1,2640 @@
+<?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, -->
+<!-- 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="LINEOUT1 Volume" value="13" />
+ <ctl name="LINEOUT2 Volume" value="13" />
+ <ctl name="LINEOUT3 Volume" value="13" />
+ <ctl name="LINEOUT4 Volume" value="13" />
+ <ctl name="HPHL Volume" value="20" />
+ <ctl name="HPHR Volume" value="20" />
+ <ctl name="RX0 Digital Volume" value="84" />
+ <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="RX6 Digital Volume" value="84" />
+ <ctl name="RX7 Digital Volume" value="84" />
+ <ctl name="RX8 Digital Volume" value="84" />
+ <ctl name="ADC1 Volume" value="12" />
+ <ctl name="ADC2 Volume" value="12" />
+ <ctl name="ADC3 Volume" value="0" />
+ <ctl name="ADC4 Volume" value="0" />
+ <ctl name="ADC5 Volume" value="12" />
+ <ctl name="ADC6 Volume" value="12" />
+ <ctl name="DEC0 Volume" value="84" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="DEC2 Volume" value="84" />
+ <ctl name="DEC3 Volume" value="84" />
+ <ctl name="DEC4 Volume" value="84" />
+ <ctl name="DEC5 Volume" value="84" />
+ <ctl name="DEC6 Volume" value="84" />
+ <ctl name="DEC7 Volume" value="84" />
+ <ctl name="DEC8 Volume" value="84" />
+ <ctl name="COMP1 Switch" value="1" />
+ <ctl name="COMP2 Switch" value="1" />
+ <ctl name="COMP7 Switch" value="0" />
+ <ctl name="COMP8 Switch" value="0" />
+ <ctl name="RX HPH Mode" value="CLS_H_LP" />
+ <ctl name="SLIMBUS_3_RX Port Mixer MI2S_TX" value="0" />
+ <ctl name="SLIMBUS_0_RX Port Mixer SLIM_0_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 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="SLIMBUS_6_RX Port Mixer SLIM_0_TX" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia1" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia5" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia7" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia10" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia11" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia12" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia13" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia14" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia15" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia16" value="0" />
+ <ctl name="SLIMBUS_4_RX Audio Mixer MultiMedia1" value="0" />
+ <ctl name="SLIMBUS_4_RX Audio Mixer MultiMedia2" value="0" />
+ <ctl name="MultiMedia5 Mixer SLIM_0_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="MultiMedia4 Mixer MI2S_TX" value="0" />
+ <ctl name="MultiMedia1 Mixer MI2S_TX" value="0" />
+ <ctl name="MultiMedia7 Mixer MI2S_TX" value="0" />
+ <ctl name="MultiMedia10 Mixer MI2S_TX" value="0" />
+ <ctl name="MultiMedia11 Mixer MI2S_TX" value="0" />
+ <ctl name="MultiMedia12 Mixer MI2S_TX" value="0" />
+ <ctl name="MultiMedia13 Mixer MI2S_TX" value="0" />
+ <ctl name="MultiMedia14 Mixer MI2S_TX" value="0" />
+ <ctl name="MultiMedia15 Mixer MI2S_TX" value="0" />
+ <ctl name="MultiMedia16 Mixer MI2S_TX" value="0" />
+ <ctl name="MultiMedia1 Mixer SLIM_0_TX" value="0" />
+ <ctl name="MultiMedia1 Mixer SLIM_4_TX" value="0" />
+ <ctl name="MultiMedia1 Mixer SLIM_7_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" />
+ <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="SLIMBUS_0_RX Audio Mixer MultiMedia1" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia1" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia2" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia2" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia3" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia3" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia5" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia5" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia7" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia7" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia7" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia10" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia10" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia10" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia11" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia11" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia11" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia12" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia12" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia12" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia13" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia13" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia13" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia14" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia14" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia14" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia15" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia15" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia15" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia16" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia16" value="0" />
+ <ctl name="SLIMBUS_6_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 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="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 SLIM_0_TX" value="0" />
+ <ctl name="IIR0 INP0 MUX" value="ZERO" />
+ <ctl name="IIR0 INP1 MUX" value="ZERO" />
+ <ctl name="IIR0 INP2 MUX" value="ZERO" />
+ <ctl name="IIR1 INP0 MUX" value="ZERO" />
+ <ctl name="IIR1 INP1 MUX" value="ZERO" />
+ <ctl name="IIR1 INP2 MUX" value="ZERO" />
+ <ctl name="SLIM0_RX_VI_FB_LCH_MUX" value="ZERO" />
+ <ctl name="SLIM0_RX_VI_FB_RCH_MUX" value="ZERO" />
+ <ctl name="VI_FEED_TX Channels" value="Two" />
+ <ctl name="AIF4_VI Mixer SPKR_VI_1" value="0" />
+ <ctl name="AIF4_VI Mixer SPKR_VI_2" value="0" />
+ <ctl name="SLIM TX13 MUX" value="ZERO" />
+ <ctl name="SLIM TX10 MUX" value="ZERO" />
+ <ctl name="SLIM TX9 MUX" value="ZERO" />
+ <ctl name="SLIM TX8 MUX" value="ZERO" />
+ <ctl name="SLIM TX7 MUX" value="ZERO" />
+ <ctl name="SLIM TX6 MUX" value="ZERO" />
+ <ctl name="SLIM TX5 MUX" value="ZERO" />
+ <ctl name="SLIM TX4 MUX" value="ZERO" />
+ <ctl name="SLIM TX3 MUX" value="ZERO" />
+ <ctl name="SLIM TX2 MUX" value="ZERO" />
+ <ctl name="SLIM TX1 MUX" value="ZERO" />
+ <ctl name="SLIM TX0 MUX" value="ZERO" />
+ <ctl name="ADC MUX13" value="AMIC" />
+ <ctl name="ADC MUX12" value="AMIC" />
+ <ctl name="ADC MUX11" value="AMIC" />
+ <ctl name="ADC MUX10" value="AMIC" />
+ <ctl name="ADC MUX8" value="AMIC" />
+ <ctl name="ADC MUX7" value="AMIC" />
+ <ctl name="ADC MUX6" value="AMIC" />
+ <ctl name="ADC MUX5" value="AMIC" />
+ <ctl name="ADC MUX4" value="AMIC" />
+ <ctl name="ADC MUX3" value="AMIC" />
+ <ctl name="ADC MUX2" value="AMIC" />
+ <ctl name="ADC MUX1" value="AMIC" />
+ <ctl name="ADC MUX0" value="AMIC" />
+ <ctl name="DMIC MUX0" value="ZERO" />
+ <ctl name="DMIC MUX1" value="ZERO" />
+ <ctl name="DMIC MUX2" value="ZERO" />
+ <ctl name="DMIC MUX3" value="ZERO" />
+ <ctl name="DMIC MUX4" value="ZERO" />
+ <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="DMIC MUX10" value="ZERO" />
+ <ctl name="DMIC MUX11" value="ZERO" />
+ <ctl name="DMIC MUX12" value="ZERO" />
+ <ctl name="DMIC MUX13" value="ZERO" />
+ <ctl name="AMIC MUX0" value="ZERO" />
+ <ctl name="AMIC MUX1" value="ZERO" />
+ <ctl name="AMIC MUX2" value="ZERO" />
+ <ctl name="AMIC MUX3" value="ZERO" />
+ <ctl name="AMIC MUX4" value="ZERO" />
+ <ctl name="AMIC MUX5" value="ZERO" />
+ <ctl name="AMIC MUX6" value="ZERO" />
+ <ctl name="AMIC MUX7" value="ZERO" />
+ <ctl name="AMIC MUX8" value="ZERO" />
+ <ctl name="AMIC MUX10" value="ZERO" />
+ <ctl name="AMIC MUX11" value="ZERO" />
+ <ctl name="AMIC MUX12" value="ZERO" />
+ <ctl name="AMIC MUX13" value="ZERO" />
+ <ctl name="RX INT0_1 MIX1 INP0" value="ZERO" />
+ <ctl name="RX INT1_1 MIX1 INP0" value="ZERO" />
+ <ctl name="RX INT2_1 MIX1 INP0" value="ZERO" />
+ <ctl name="RX INT3_1 MIX1 INP0" value="ZERO" />
+ <ctl name="RX INT4_1 MIX1 INP0" value="ZERO" />
+ <ctl name="RX INT5_1 MIX1 INP0" value="ZERO" />
+ <ctl name="RX INT6_1 MIX1 INP0" value="ZERO" />
+ <ctl name="RX INT7_1 MIX1 INP0" value="ZERO" />
+ <ctl name="RX INT8_1 MIX1 INP0" value="ZERO" />
+ <ctl name="RX INT0_1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX INT1_1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX INT2_1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX INT3_1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX INT4_1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX INT5_1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX INT6_1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX INT7_1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX INT8_1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX INT0_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT1_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT2_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT3_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT4_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT5_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT6_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT7_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT8_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT0_2 MUX" value="ZERO" />
+ <ctl name="RX INT1_2 MUX" value="ZERO" />
+ <ctl name="RX INT2_2 MUX" value="ZERO" />
+ <ctl name="RX INT3_2 MUX" value="ZERO" />
+ <ctl name="RX INT4_2 MUX" value="ZERO" />
+ <ctl name="RX INT5_2 MUX" value="ZERO" />
+ <ctl name="RX INT6_2 MUX" value="ZERO" />
+ <ctl name="RX INT7_2 MUX" value="ZERO" />
+ <ctl name="RX INT8_2 MUX" value="ZERO" />
+ <ctl name="SPL SRC0 MUX" value="ZERO" />
+ <ctl name="SPL SRC1 MUX" value="ZERO" />
+ <ctl name="SPL SRC2 MUX" value="ZERO" />
+ <ctl name="SPL SRC3 MUX" value="ZERO" />
+ <ctl name="RX INT1 SPLINE MIX HPHL Switch" value="0" />
+ <ctl name="RX INT3 SPLINE MIX LO1 Switch" value="0" />
+ <ctl name="RX INT2 SPLINE MIX HPHR Switch" value="0" />
+ <ctl name="RX INT4 SPLINE MIX LO2 Switch" value="0" />
+ <ctl name="RX INT5 SPLINE MIX LO3 Switch" value="0" />
+ <ctl name="RX INT6 SPLINE MIX LO4 Switch" value="0" />
+ <ctl name="RX INT7 SPLINE MIX SPKRL Switch" value="0" />
+ <ctl name="RX INT8 SPLINE MIX SPKRR Switch" value="0" />
+ <ctl name="RX MIX TX0 MUX" value="ZERO" />
+ <ctl name="RX MIX TX1 MUX" value="ZERO" />
+ <ctl name="RX MIX TX2 MUX" value="ZERO" />
+ <ctl name="RX MIX TX3 MUX" value="ZERO" />
+ <ctl name="RX MIX TX4 MUX" value="ZERO" />
+ <ctl name="RX MIX TX5 MUX" value="ZERO" />
+ <ctl name="RX MIX TX6 MUX" value="ZERO" />
+ <ctl name="RX MIX TX7 MUX" value="ZERO" />
+ <ctl name="RX MIX TX8 MUX" value="ZERO" />
+ <ctl name="IIR0 INP0 MUX" value="ZERO" />
+ <ctl name="IIR0 INP1 MUX" value="ZERO" />
+ <ctl name="IIR0 INP2 MUX" value="ZERO" />
+ <ctl name="IIR0 INP3 MUX" value="ZERO" />
+ <ctl name="IIR1 INP0 MUX" value="ZERO" />
+ <ctl name="IIR1 INP1 MUX" value="ZERO" />
+ <ctl name="IIR1 INP2 MUX" value="ZERO" />
+ <ctl name="IIR1 INP3 MUX" value="ZERO" />
+ <ctl name="RX INT0 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX INT1 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX INT2 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="SLIM_0_RX Channels" value="One" />
+ <ctl name="SLIM_5_RX Channels" value="One" />
+ <ctl name="SLIM_0_TX Channels" value="One" />
+ <ctl name="SLIM_1_TX Channels" value="One" />
+ <ctl name="SLIM RX0 MUX" value="ZERO" />
+ <ctl name="SLIM RX2 MUX" value="ZERO" />
+ <ctl name="SLIM RX3 MUX" value="ZERO" />
+ <ctl name="SLIM RX4 MUX" value="ZERO" />
+ <ctl name="SLIM RX5 MUX" value="ZERO" />
+ <ctl name="EAR PA Gain" value="G_6_DB" />
+ <ctl name="EAR SPKR PA Gain" value="G_DEFAULT" />
+ <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="SLIM RX1 MUX" value="ZERO" />
+ <ctl name="AIF1_CAP Mixer SLIM TX7" value="0" />
+ <ctl name="AIF1_CAP Mixer SLIM TX8" value="0"/>
+ <ctl name="AIF1_CAP Mixer SLIM TX6" value="0" />
+ <ctl name="AIF1_CAP Mixer SLIM TX5" value="0"/>
+ <ctl name="AIF1_CAP Mixer SLIM TX4" value="0" />
+ <ctl name="AIF1_CAP Mixer SLIM TX3" value="0"/>
+ <ctl name="AIF1_CAP Mixer SLIM TX2" value="0" />
+ <ctl name="AIF1_CAP Mixer SLIM TX1" value="0"/>
+ <ctl name="AIF1_CAP Mixer SLIM TX0" value="0"/>
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="SLIMBUS_6_RX Port Mixer AUX_PCM_UL_TX" value="0" />
+ <ctl name= "RX INT1_1 NATIVE MUX" value="OFF" />
+ <ctl name= "RX INT2_1 NATIVE MUX" value="OFF" />
+ <ctl name= "RX INT3_1 NATIVE MUX" value="OFF" />
+ <ctl name= "RX INT4_1 NATIVE MUX" value="OFF" />
+ <!-- HFP start -->
+ <ctl name="HFP_SLIM7_UL_HL Switch" value="0" />
+ <ctl name="SLIMBUS_0_RX Port Mixer SLIM_7_TX" value="0" />
+ <ctl name="SLIMBUS_6_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="SLIMBUS_0_RX Port Mixer SLIM_8_TX" value="0" />
+ <ctl name="SLIMBUS_DL_HL Switch" value="0" />
+ <ctl name="SLIMBUS_6_RX Port Mixer SLIM_8_TX" value="0" />
+ <ctl name="SLIMBUS6_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="SLIM_0_RX_Voice Mixer VoiceMMode1" value="0" />
+ <ctl name="SLIM_6_RX_Voice Mixer VoiceMMode1" value="0" />
+ <ctl name="VoiceMMode1_Tx Mixer SLIM_0_TX_MMode1" 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="SLIM_0_RX_Voice Mixer VoiceMMode2" value="0" />
+ <ctl name="SLIM_6_RX_Voice Mixer VoiceMMode2" value="0" />
+ <ctl name="VoiceMMode2_Tx Mixer SLIM_0_TX_MMode2" 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" />
+ <ctl name="AIF3_CAP Mixer SLIM TX1" value="0" />
+ <ctl name="AIF3_CAP Mixer SLIM TX2" value="0" />
+ <!-- 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="SLIM_0_RX_Voice Mixer Voip" value="0" />
+ <ctl name="SLIM_6_RX_Voice Mixer Voip" value="0" />
+ <ctl name="Voip_Tx Mixer SLIM_0_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-->
+
+ <!-- VoWLAN start -->
+ <ctl name="SLIM_0_RX_Voice Mixer VoWLAN" value="0" />
+ <ctl name="SLIM_6_RX_Voice Mixer VoWLAN" value="0" />
+ <ctl name="VoWLAN_Tx Mixer SLIM_0_TX_VoWLAN" value="0" />
+ <ctl name="SLIM_7_RX_Voice Mixer VoWLAN" value="0" />
+ <ctl name="VoWLAN_Tx Mixer SLIM_7_TX_VoWLAN" value="0" />
+ <ctl name="AFE_PCM_RX_Voice Mixer VoWLAN" value="0" />
+ <ctl name="VoWLAN_Tx Mixer AFE_PCM_TX_VoWLAN" value="0" />
+ <ctl name="USB_AUDIO_RX_Voice Mixer VoWLAN" value="0" />
+ <ctl name="VoWLAN_Tx Mixer USB_AUDIO_TX_VoWLAN" value="0" />
+ <!-- VoWLAN 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" />
+ <!-- IIR/voice anc -->
+ <ctl name="IIR0 Band1" id ="0" value="268435456" />
+ <ctl name="IIR0 Band1" id ="1" value="0" />
+ <ctl name="IIR0 Band1" id ="2" value="0" />
+ <ctl name="IIR0 Band1" id ="3" value="0" />
+ <ctl name="IIR0 Band1" id ="4" value="0" />
+ <ctl name="IIR0 Band2" id ="0" value="268435456" />
+ <ctl name="IIR0 Band2" id ="1" value="0" />
+ <ctl name="IIR0 Band2" id ="2" value="0" />
+ <ctl name="IIR0 Band2" id ="3" value="0" />
+ <ctl name="IIR0 Band2" id ="4" value="0" />
+ <ctl name="IIR0 Band3" id ="0" value="268435456" />
+ <ctl name="IIR0 Band3" id ="1" value="0" />
+ <ctl name="IIR0 Band3" id ="2" value="0" />
+ <ctl name="IIR0 Band3" id ="3" value="0" />
+ <ctl name="IIR0 Band3" id ="4" value="0" />
+ <ctl name="IIR0 Band4" id ="0" value="268435456" />
+ <ctl name="IIR0 Band4" id ="1" value="0" />
+ <ctl name="IIR0 Band4" id ="2" value="0" />
+ <ctl name="IIR0 Band4" id ="3" value="0" />
+ <ctl name="IIR0 Band4" id ="4" value="0" />
+ <ctl name="IIR0 Band5" id ="0" value="268435456" />
+ <ctl name="IIR0 Band5" id ="1" value="0" />
+ <ctl name="IIR0 Band5" id ="2" value="0" />
+ <ctl name="IIR0 Band5" id ="3" value="0" />
+ <ctl name="IIR0 Band5" id ="4" value="0" />
+ <ctl name="IIR0 Enable Band1" value="0" />
+ <ctl name="IIR0 Enable Band2" value="0" />
+ <ctl name="IIR0 Enable Band3" value="0" />
+ <ctl name="IIR0 Enable Band4" value="0" />
+ <ctl name="IIR0 Enable Band5" value="0" />
+ <ctl name="IIR0 INP0 Volume" value="54" />
+ <!-- IIR/voice anc end -->
+ <!-- anc handset -->
+ <ctl name="ANC Slot" value="0" />
+ <ctl name="ANC0 FB MUX" value="ZERO" />
+ <ctl name="ANC1 FB MUX" value="ZERO" />
+ <ctl name="ANC EAR Enable Switch" value="0" />
+ <ctl name="ANC OUT EAR SPKR Enable Switch" value="0" />
+ <ctl name="ANC SPKR PA Enable Switch" value="0" />
+ <ctl name="SpkrLeft WSA PA Gain" value="G_0_DB" />
+ <!-- anc handset end -->
+ <ctl name="ANC Function" value="OFF" />
+ <ctl name="ANC HPHL Enable Switch" value="0" />
+ <ctl name="ANC HPHR Enable Switch" value="0" />
+ <!-- anc headset end-->
+ <!-- aanc handset mic -->
+ <ctl name="AIF1_CAP Mixer SLIM TX9" value="0" />
+ <ctl name="AANC_SLIM_0_RX MUX" value="ZERO" />
+ <!-- aanc handset mic end -->
+ <!-- ssr qmic -->
+ <ctl name="AIF1_CAP Mixer SLIM TX10" value="0" />
+ <!-- ssr qmic end-->
+ <!-- audio record compress-->
+ <ctl name="MultiMedia8 Mixer SLIM_0_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-->
+ <!-- listen -->
+ <ctl name="LSM1 MUX" value="None" />
+ <ctl name="LSM2 MUX" value="None" />
+ <ctl name="LSM3 MUX" value="None" />
+ <ctl name="LSM4 MUX" value="None" />
+ <ctl name="LSM5 MUX" value="None" />
+ <ctl name="LSM6 MUX" value="None" />
+ <ctl name="LSM7 MUX" value="None" />
+ <ctl name="LSM8 MUX" value="None" />
+ <ctl name="SLIMBUS_5_TX LSM Function" value="None" />
+ <!-- listen 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="SLIMBUS_DL_HL Switch" value="0" />
+ <ctl name="SLIMBUS6_DL_HL Switch" value="0" />
+ <!-- ADSP testfwk end-->
+
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia3" value="0" />
+
+ <!-- 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">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_RX" />
+ </path>
+
+ <path name="echo-reference headphones">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_6_RX" />
+ </path>
+
+ <path name="echo-reference headphones-44.1">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_1_TX" />
+ </path>
+
+ <path name="deep-buffer-playback">
+ <ctl name="SLIMBUS_0_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 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="SLIMBUS_6_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="SLIMBUS_0_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 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="SLIMBUS_6_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="SLIMBUS_0_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="SLIMBUS_6_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 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 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="SLIMBUS_0_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 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="SLIMBUS_6_RX Audio Mixer MultiMedia4" value="1" />
+ </path>
+
+ <path name="compress-offload-playback headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia4" value="1" />
+ </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="SLIMBUS_0_RX Audio 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="SLIMBUS_6_RX Audio Mixer MultiMedia7" value="1" />
+ </path>
+
+ <path name="compress-offload-playback2 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia7" value="1" />
+ </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="SLIMBUS_0_RX Audio 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="SLIMBUS_6_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="compress-offload-playback3 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia10" value="1" />
+ </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="SLIMBUS_0_RX Audio 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="SLIMBUS_6_RX Audio Mixer MultiMedia11" value="1" />
+ </path>
+
+ <path name="compress-offload-playback4 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia11" value="1" />
+ </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="SLIMBUS_0_RX Audio 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="SLIMBUS_6_RX Audio Mixer MultiMedia12" value="1" />
+ </path>
+
+ <path name="compress-offload-playback5 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia12" value="1" />
+ </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="SLIMBUS_0_RX Audio 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="SLIMBUS_6_RX Audio Mixer MultiMedia13" value="1" />
+ </path>
+
+ <path name="compress-offload-playback6 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia13" value="1" />
+ </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="SLIMBUS_0_RX Audio 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="SLIMBUS_6_RX Audio Mixer MultiMedia14" value="1" />
+ </path>
+
+ <path name="compress-offload-playback7 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia14" value="1" />
+ </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="SLIMBUS_0_RX Audio 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="SLIMBUS_6_RX Audio Mixer MultiMedia15" value="1" />
+ </path>
+
+ <path name="compress-offload-playback8 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia15" value="1" />
+ </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="SLIMBUS_0_RX Audio 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="SLIMBUS_6_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="compress-offload-playback9 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia16" value="1" />
+ </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 SLIM_0_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 SLIM_0_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 SLIM_0_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="SLIMBUS_0_RX Port Mixer SLIM_8_TX" value="1" />
+ <ctl name="SLIMBUS_DL_HL Switch" value="1" />
+ </path>
+
+ <path name="play-fm headphones">
+ <ctl name="SLIMBUS_8 LOOPBACK Volume" value="1" />
+ <ctl name="SLIMBUS_6_RX Port Mixer SLIM_8_TX" value="1" />
+ <ctl name="SLIMBUS6_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="SLIMBUS_0_RX Port Mixer SLIM_7_TX" value="1" />
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia6" value="1" />
+ <ctl name="MultiMedia6 Mixer SLIM_0_TX" value="1" />
+ <ctl name="SLIMBUS_DL_HL Switch" value="1" />
+ </path>
+
+ <path name="hfp-sco headphones">
+ <ctl name="HFP_SLIM7_UL_HL Switch" value="1" />
+ <ctl name="SLIMBUS_6_RX Port Mixer SLIM_7_TX" value="1" />
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia6" value="1" />
+ <ctl name="MultiMedia6 Mixer SLIM_0_TX" value="1" />
+ <ctl name="SLIMBUS6_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="SLIM_0_RX_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer SLIM_0_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 SLIM_0_TX_Voip" value="1" />
+ </path>
+
+ <path name="compress-voip-call headphones">
+ <ctl name="SLIM_6_RX_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer SLIM_0_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 SLIM_0_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="vowlan-call">
+ <ctl name="SLIM_0_RX_Voice Mixer VoWLAN" value="1" />
+ <ctl name="VoWLAN_Tx Mixer SLIM_0_TX_VoWLAN" value="1" />
+ </path>
+
+ <path name="vowlan-call headphones">
+ <ctl name="SLIM_6_RX_Voice Mixer VoWLAN" value="1" />
+ <ctl name="VoWLAN_Tx Mixer SLIM_0_TX_VoWLAN" value="1" />
+ </path>
+
+ <path name="vowlan-call bt-sco">
+ <ctl name="SLIM_7_RX_Voice Mixer VoWLAN" value="1" />
+ <ctl name="VoWLAN_Tx Mixer SLIM_7_TX_VoWLAN" value="1" />
+ </path>
+
+ <path name="vowlan-call bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="vowlan-call bt-sco" />
+ </path>
+
+ <path name="vowlan-call afe-proxy">
+ <ctl name="AFE_PCM_RX_Voice Mixer VoWLAN" value="1" />
+ <ctl name="VoWLAN_Tx Mixer AFE_PCM_TX_VoWLAN" value="1" />
+ </path>
+
+ <path name="vowlan-call usb-headphones">
+ <ctl name="USB_AUDIO_RX_Voice Mixer VoWLAN" value="1" />
+ <ctl name="VoWLAN_Tx Mixer SLIM_0_TX_VoWLAN" value="1" />
+ </path>
+
+ <path name="vowlan-call usb-headset">
+ <ctl name="USB_AUDIO_RX_Voice Mixer VoWLAN" value="1" />
+ <ctl name="VoWLAN_Tx Mixer USB_AUDIO_TX_VoWLAN" value="1" />
+ </path>
+
+ <path name="voicemmode1-call">
+ <ctl name="SLIM_0_RX_Voice Mixer VoiceMMode1" value="1" />
+ <ctl name="VoiceMMode1_Tx Mixer SLIM_0_TX_MMode1" value="1" />
+ </path>
+
+ <path name="voicemmode1-call headphones">
+ <ctl name="SLIM_6_RX_Voice Mixer VoiceMMode1" value="1" />
+ <ctl name="VoiceMMode1_Tx Mixer SLIM_0_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 SLIM_0_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="voicemmode2-call">
+ <ctl name="SLIM_0_RX_Voice Mixer VoiceMMode2" value="1" />
+ <ctl name="VoiceMMode2_Tx Mixer SLIM_0_TX_MMode2" value="1" />
+ </path>
+
+ <path name="voicemmode2-call headphones">
+ <ctl name="SLIM_6_RX_Voice Mixer VoiceMMode2" value="1" />
+ <ctl name="VoiceMMode2_Tx Mixer SLIM_0_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 SLIM_0_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="listen-voice-wakeup-1">
+ <ctl name="LSM1 MUX" value="SLIMBUS_5_TX" />
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ </path>
+ <path name="listen-voice-wakeup-2">
+ <ctl name="LSM2 MUX" value="SLIMBUS_5_TX" />
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ </path>
+ <path name="listen-voice-wakeup-3">
+ <ctl name="LSM3 MUX" value="SLIMBUS_5_TX" />
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ </path>
+ <path name="listen-voice-wakeup-4">
+ <ctl name="LSM4 MUX" value="SLIMBUS_5_TX" />
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ </path>
+ <path name="listen-voice-wakeup-5">
+ <ctl name="LSM5 MUX" value="SLIMBUS_5_TX" />
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ </path>
+ <path name="listen-voice-wakeup-6">
+ <ctl name="LSM6 MUX" value="SLIMBUS_5_TX" />
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ </path>
+ <path name="listen-voice-wakeup-7">
+ <ctl name="LSM7 MUX" value="SLIMBUS_5_TX" />
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ </path>
+ <path name="listen-voice-wakeup-8">
+ <ctl name="LSM8 MUX" value="SLIMBUS_5_TX" />
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ </path>
+
+ <path name="spkr-rx-calib">
+ <ctl name="SLIMBUS_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="AIF1_CAP Mixer SLIM TX6" value="1"/>
+ <ctl name="SLIM_0_TX Channels" value="One" />
+ <ctl name="SLIM TX6 MUX" value="DEC6" />
+ <ctl name="ADC MUX6" value="AMIC" />
+ <ctl name="AMIC MUX6" value="ADC1" />
+ <ctl name="IIR0 INP0 MUX" value="DEC6" />
+ </path>
+
+ <path name="adc2">
+ <ctl name="AIF1_CAP Mixer SLIM TX0" value="1"/>
+ <ctl name="SLIM_0_TX Channels" value="One" />
+ <ctl name="SLIM TX0 MUX" value="DEC0" />
+ <ctl name="ADC MUX0" value="AMIC" />
+ <ctl name="AMIC MUX0" value="ADC2" />
+ <ctl name="IIR0 INP0 MUX" value="DEC0" />
+ </path>
+
+ <path name="adc5">
+ <ctl name="AIF1_CAP Mixer SLIM TX5" value="1"/>
+ <ctl name="SLIM_0_TX Channels" value="One" />
+ <ctl name="SLIM TX5 MUX" value="DEC5" />
+ <ctl name="ADC MUX5" value="AMIC" />
+ <ctl name="AMIC MUX5" value="ADC5" />
+ <ctl name="IIR0 INP0 MUX" value="DEC5" />
+ </path>
+
+ <path name="adc6">
+ <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="AMIC" />
+ <ctl name="AMIC MUX7" value="ADC6" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <!-- For Tasha, DMIC numbered from 0 to 5 -->
+ <path name="dmic1">
+ <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="dmic2">
+ <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="DMIC1" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <path name="dmic3">
+ <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="DMIC2" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <path name="dmic4">
+ <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="DMIC3" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <path name="dmic5">
+ <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="DMIC4" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <path name="dmic6">
+ <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="DMIC5" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <path name="speaker">
+ <ctl name="COMP7 Switch" value="1" />
+ <ctl name="COMP8 Switch" value="1" />
+ <ctl name="SLIM RX0 MUX" value="AIF_MIX1_PB" />
+ <ctl name="SLIM RX1 MUX" value="AIF_MIX1_PB" />
+ <ctl name="SLIM_0_RX Channels" value="Two" />
+ <ctl name="RX INT7_1 MIX1 INP0" value="RX0" />
+ <ctl name="RX INT8_1 MIX1 INP0" value="RX1" />
+ <ctl name="SpkrLeft COMP Switch" value="1" />
+ <ctl name="SpkrRight COMP Switch" value="1" />
+ <ctl name="SpkrLeft BOOST Switch" value="1" />
+ <ctl name="SpkrRight BOOST Switch" value="1" />
+ <ctl name="SpkrLeft VISENSE Switch" value="1" />
+ <ctl name="SpkrRight VISENSE Switch" value="1" />
+ <ctl name="SpkrLeft SWR DAC_Port Switch" value="1" />
+ <ctl name="SpkrRight SWR DAC_Port Switch" value="1" />
+ </path>
+
+ <path name="speaker-fluid">
+ <ctl name="COMP7 Switch" value="1" />
+ <ctl name="SLIM RX0 MUX" value="AIF_MIX1_PB" />
+ <ctl name="SLIM_0_RX Channels" value="One" />
+ <ctl name="RX INT7_1 MIX1 INP0" value="RX0" />
+ <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" />
+ </path>
+
+ <path name="speaker-mono">
+ <ctl name="COMP7 Switch" value="1" />
+ <ctl name="SLIM RX0 MUX" value="AIF_MIX1_PB" />
+ <ctl name="SLIM_0_RX Channels" value="One" />
+ <ctl name="RX INT7_1 MIX1 INP0" value="RX0" />
+ <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" />
+ </path>
+
+ <path name="speaker-mono-2">
+ <ctl name="COMP8 Switch" value="1" />
+ <ctl name="SLIM RX1 MUX" value="AIF_MIX1_PB" />
+ <ctl name="SLIM_0_RX Channels" value="One" />
+ <ctl name="RX INT8_1 MIX1 INP0" value="RX1" />
+ <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" />
+ </path>
+
+ <path name="speaker-liquid">
+ <path name="speaker" />
+ </path>
+
+ <path name="sidetone-iir">
+ <ctl name="IIR0 Enable Band1" value="1" />
+ <ctl name="IIR0 Enable Band2" value="1" />
+ <ctl name="IIR0 Enable Band3" value="1" />
+ <ctl name="IIR0 Enable Band4" value="1" />
+ <ctl name="IIR0 Enable Band5" value="1" />
+ </path>
+
+ <path name="sidetone-headphones">
+ <path name="sidetone-iir" />
+ <ctl name="IIR0 INP0 Volume" value="54" />
+ <ctl name="RX INT1 MIX2 INP" value="SRC0" />
+ <ctl name="RX INT2 MIX2 INP" value="SRC0" />
+ </path>
+
+ <path name="sidetone-handset">
+ <path name="sidetone-iir" />
+ <ctl name="IIR0 INP0 Volume" value="54" />
+ <ctl name="RX INT7 MIX2 INP" value="SRC0" />
+ </path>
+
+ <path name="speaker-mic">
+ <path name="dmic2" />
+ </path>
+
+ <path name="speaker-mic-liquid">
+ <path name="dmic2" />
+ <ctl name="DEC7 Volume" value="111" />
+ </path>
+
+ <path name="speaker-mic-sbc">
+ <path name="adc5" />
+ <ctl name="ADC5 Volume" value="12" />
+ </path>
+
+ <path name="speaker-protected">
+ <ctl name="AIF4_VI Mixer SPKR_VI_1" value="1" />
+ <ctl name="AIF4_VI Mixer SPKR_VI_2" value="1" />
+ <ctl name="SLIM_4_TX Format" value="PACKED_16B" />
+ <path name="speaker" />
+ <ctl name="VI_FEED_TX Channels" value="Two" />
+ <ctl name="SLIM0_RX_VI_FB_LCH_MUX" value="SLIM4_TX" />
+ <ctl name="SLIM0_RX_VI_FB_RCH_MUX" value="SLIM4_TX" />
+ </path>
+
+ <path name="voice-speaker-protected">
+ <ctl name="AIF4_VI Mixer SPKR_VI_1" value="1" />
+ <ctl name="SLIM_4_TX Format" value="PACKED_16B" />
+ <path name="speaker-mono" />
+ <ctl name="VI_FEED_TX Channels" value="One" />
+ <ctl name="SLIM0_RX_VI_FB_LCH_MUX" value="SLIM4_TX" />
+ </path>
+
+ <path name="voice-speaker-2-protected">
+ <ctl name="AIF4_VI Mixer SPKR_VI_2" value="1" />
+ <ctl name="SLIM_4_TX Format" value="PACKED_16B" />
+ <path name="speaker-mono-2" />
+ <ctl name="VI_FEED_TX Channels" value="One" />
+ <ctl name="SLIM0_RX_VI_FB_LCH_MUX" value="SLIM4_TX" />
+ </path>
+
+ <path name="vi-feedback">
+ </path>
+
+ <path name="vi-feedback-mono-1">
+ </path>
+
+ <path name="vi-feedback-mono-2">
+ </path>
+
+ <path name="handset">
+ <ctl name="COMP7 Switch" value="1" />
+ <ctl name="SLIM RX0 MUX" value="AIF_MIX1_PB" />
+ <ctl name="SLIM_0_RX Channels" value="One" />
+ <ctl name="RX INT7_1 MIX1 INP0" value="RX0" />
+ <ctl name="SpkrLeft COMP Switch" value="1" />
+ <ctl name="SpkrLeft BOOST Switch" value="1" />
+ <ctl name="SpkrLeft SWR DAC_Port Switch" value="1" />
+ <ctl name="EAR SPKR PA Gain" value="G_6_DB" />
+ </path>
+
+ <path name="handset-mic">
+ <path name="dmic3" />
+ </path>
+
+ <path name="handset-mic-db">
+ <path name="adc6" />
+ </path>
+
+ <path name="handset-mic-cdp">
+ <path name="adc1" />
+ <ctl name="ADC1 Volume" value="12" />
+ </path>
+
+ <path name="handset-mic-sbc">
+ <path name="adc5" />
+ <ctl name="ADC5 Volume" value="12" />
+ </path>
+
+ <path name="three-mic">
+ <ctl name="AIF1_CAP Mixer SLIM TX5" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX6" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX8" 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 TX8 MUX" value="DEC8" />
+ <ctl name="ADC MUX8" value="DMIC" />
+ <ctl name="DMIC MUX8" value="DMIC5" />
+ </path>
+
+ <path name="anc-handset">
+ <ctl name="ANC Function" value="ON" />
+ <ctl name="ANC Slot" value="6" />
+ <ctl name="SLIM RX0 MUX" value="AIF_MIX1_PB" />
+ <ctl name="SLIM_0_RX Channels" value="One" />
+ <ctl name="RX INT7_1 MIX1 INP0" value="RX0" />
+ <ctl name="ANC OUT EAR SPKR Enable Switch" value="1" />
+ <ctl name="ANC SPKR PA Enable Switch" value="1" />
+ <ctl name="SpkrLeft SWR DAC_Port Switch" value="1" />
+ <ctl name="SpkrLeft WSA PA Gain" value="G_6_DB" />
+ </path>
+
+ <path name="headphones">
+ <ctl name="SLIM RX2 MUX" value="AIF4_PB" />
+ <ctl name="SLIM RX3 MUX" value="AIF4_PB" />
+ <ctl name="SLIM_6_RX Channels" value="Two" />
+ <ctl name= "RX INT1_2 MUX" value="RX2" />
+ <ctl name= "RX INT2_2 MUX" value="RX3" />
+ <ctl name="RX INT1 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX INT2 DEM MUX" value="CLSH_DSM_OUT" />
+ </path>
+
+ <path name="headphones-44.1">
+ <ctl name="SLIM RX4 MUX" value="AIF3_PB" />
+ <ctl name="SLIM RX5 MUX" value="AIF3_PB" />
+ <ctl name="SLIM_5_RX Channels" value="Two" />
+ <ctl name="SLIM_5_RX SampleRate" value="KHZ_44P1" />
+ <ctl name="RX INT1_1 MIX1 INP0" value="RX4" />
+ <ctl name="RX INT2_1 MIX1 INP1" value="RX5" />
+ <ctl name="RX INT1 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX INT2 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="SPL SRC0 MUX" value="SRC_IN_HPHL" />
+ <ctl name="SPL SRC1 MUX" value="SRC_IN_HPHR" />
+ <ctl name="RX INT1 SPLINE MIX HPHL Switch" value="1" />
+ <ctl name="RX INT2 SPLINE MIX HPHR Switch" value="1" />
+ </path>
+
+
+ <path name="true-native-mode">
+ <ctl name="RX INT1_2 MUX" value="ZERO" />
+ <ctl name="RX INT2_2 MUX" value="ZERO" />
+ <ctl name= "RX INT1_1 MIX1 INP0" value="RX2" />
+ <ctl name= "RX INT2_1 MIX1 INP0" value="RX3" />
+ <ctl name= "RX INT1_1 NATIVE MUX" value="ON" />
+ <ctl name= "RX INT2_1 NATIVE MUX" value="ON" />
+ </path>
+
+ <path name="hph-highquality-mode">
+ <ctl name="RX HPH Mode" value="CLS_H_LOHIFI" />
+ </path>
+
+ <path name="hph-lowpower-mode">
+ <ctl name="RX HPH Mode" value="CLS_H_LP" />
+ </path>
+
+ <path name="line">
+ <path name="headphones" />
+ </path>
+
+ <path name="headset-mic">
+ <path name="adc2" />
+ <ctl name="ADC2 Volume" value="12" />
+ </path>
+
+ <path name="headset-mic-liquid">
+ <path name="adc2" />
+ <ctl name="ADC2 Volume" value="12" />
+ </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-headphones">
+ <path name="headphones" />
+ <ctl name="RX HPH Mode" value="CLS_H_LP" />
+ </path>
+
+ <path name="voice-line">
+ <path name="voice-headphones" />
+ </path>
+
+ <path name="voice-headset-mic">
+ <path name="headset-mic" />
+ <ctl name="ADC2 Volume" value="12" />
+ </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">
+ <ctl name="COMP1 Switch" value="0" />
+ <ctl name="COMP2 Switch" value="0" />
+ <ctl name="ANC Function" value="ON" />
+ <ctl name="ANC Slot" value="0" />
+ <ctl name="ADC MUX10" value="AMIC" />
+ <ctl name="AMIC MUX10" value="ADC3" />
+ <ctl name="ADC MUX12" value="AMIC" />
+ <ctl name="AMIC MUX12" value="ADC4" />
+ <ctl name="ANC0 FB MUX" value="ANC_IN_HPHL" />
+ <ctl name="ANC1 FB MUX" value="ANC_IN_HPHR" />
+ <ctl name="ADC3 Volume" value="8" />
+ <ctl name="ADC4 Volume" value="8" />
+ <ctl name="SLIM RX2 MUX" value="AIF4_PB" />
+ <ctl name="SLIM RX3 MUX" value="AIF4_PB" />
+ <ctl name="SLIM_6_RX Channels" value="Two" />
+ <ctl name="RX INT1_1 MIX1 INP0" value="RX2" />
+ <ctl name="RX INT2_1 MIX1 INP0" value="RX3" />
+ <ctl name="RX INT1 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX INT2 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ <ctl name="RX2 Digital Volume" value="84" />
+ <ctl name="ANC HPHL Enable Switch" value="1" />
+ <ctl name="ANC HPHR Enable Switch" value="1" />
+ <ctl name="HPHL Volume" value="20" />
+ <ctl name="HPHR Volume" value="20" />
+ </path>
+
+ <path name="speaker-and-anc-headphones">
+ <path name="anc-headphones" />
+ <path name="speaker" />
+ </path>
+
+ <path name="anc-fb-headphones">
+ <path name="anc-headphones" />
+ <ctl name="ANC Slot" value="1" />
+ </path>
+
+ <path name="speaker-and-anc-fb-headphones">
+ <path name="anc-fb-headphones" />
+ <path name="speaker" />
+ </path>
+
+ <path name="voice-anc-headphones">
+ <ctl name="COMP1 Switch" value="0" />
+ <ctl name="COMP2 Switch" value="0" />
+ <ctl name="ANC Function" value="ON" />
+ <ctl name="ANC Slot" value="0" />
+ <ctl name="ADC MUX10" value="AMIC" />
+ <ctl name="AMIC MUX10" value="ADC3" />
+ <ctl name="ADC MUX12" value="AMIC" />
+ <ctl name="AMIC MUX12" value="ADC4" />
+ <ctl name="ANC0 FB MUX" value="ANC_IN_HPHL" />
+ <ctl name="ANC1 FB MUX" value="ANC_IN_HPHR" />
+ <ctl name="ADC3 Volume" value="8" />
+ <ctl name="ADC4 Volume" value="8" />
+ <ctl name="SLIM RX2 MUX" value="AIF4_PB" />
+ <ctl name="SLIM RX3 MUX" value="AIF4_PB" />
+ <ctl name="SLIM_6_RX Channels" value="Two" />
+ <ctl name="RX INT1_1 MIX1 INP0" value="RX2" />
+ <ctl name="RX INT2_1 MIX1 INP0" value="RX3" />
+ <ctl name="RX HPH Mode" value="CLS_H_LP" />
+ <ctl name="IIR0 Enable Band1" value="1" />
+ <ctl name="IIR0 Enable Band2" value="1" />
+ <ctl name="IIR0 Enable Band3" value="1" />
+ <ctl name="IIR0 Enable Band4" value="1" />
+ <ctl name="IIR0 Enable Band5" value="1" />
+ <ctl name="IIR0 INP0 Volume" value="54" />
+ <ctl name="RX INT1 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX INT2 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX1 Digital Volume" value="81" />
+ <ctl name="RX2 Digital Volume" value="81" />
+ <ctl name="ANC HPHL Enable Switch" value="1" />
+ <ctl name="ANC HPHR Enable Switch" value="1" />
+ <ctl name="HPHL Volume" value="20" />
+ <ctl name="HPHR Volume" value="20" />
+ </path>
+
+ <path name="voice-anc-fb-headphones">
+ <ctl name="COMP1 Switch" value="0" />
+ <ctl name="COMP2 Switch" value="0" />
+ <ctl name="ANC Function" value="ON" />
+ <ctl name="ANC Slot" value="1" />
+ <ctl name="ADC MUX10" value="AMIC" />
+ <ctl name="AMIC MUX10" value="ADC3" />
+ <ctl name="ADC MUX12" value="AMIC" />
+ <ctl name="AMIC MUX12" value="ADC4" />
+ <ctl name="ANC0 FB MUX" value="ANC_IN_HPHL" />
+ <ctl name="ANC1 FB MUX" value="ANC_IN_HPHR" />
+ <ctl name="ADC3 Volume" value="8" />
+ <ctl name="ADC4 Volume" value="8" />
+ <ctl name="SLIM RX2 MUX" value="AIF4_PB" />
+ <ctl name="SLIM RX3 MUX" value="AIF4_PB" />
+ <ctl name="SLIM_6_RX Channels" value="Two" />
+ <ctl name="RX INT1_1 MIX1 INP0" value="RX2" />
+ <ctl name="RX INT2_1 MIX1 INP0" value="RX3" />
+ <ctl name="RX HPH Mode" value="CLS_H_LP" />
+ <ctl name="IIR0 Enable Band1" value="1" />
+ <ctl name="IIR0 Enable Band2" value="1" />
+ <ctl name="IIR0 Enable Band3" value="1" />
+ <ctl name="IIR0 Enable Band4" value="1" />
+ <ctl name="IIR0 Enable Band5" value="1" />
+ <ctl name="IIR0 INP0 Volume" value="62" />
+ <ctl name="RX INT1 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX INT2 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX1 Digital Volume" value="81" />
+ <ctl name="RX2 Digital Volume" value="81" />
+ <ctl name="ANC HPHL Enable Switch" value="1" />
+ <ctl name="ANC HPHR Enable Switch" value="1" />
+ <ctl name="HPHL Volume" value="14" />
+ <ctl name="HPHR Volume" value="14" />
+ </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">
+ <ctl name="ADC MUX10" value="DMIC" />
+ <ctl name="DMIC MUX10" value="DMIC4" />
+ <ctl name="ANC0 FB MUX" value="ANC_IN_EAR_SPKR" />
+ </path>
+
+ <path name="aanc-handset-mic">
+ <ctl name="AIF1_CAP Mixer SLIM TX6" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX8" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX9" value="1" />
+ <ctl name="SLIM_0_TX Channels" value="Three" />
+ <ctl name="AANC_SLIM_0_RX MUX" value="SLIMBUS_0_TX" />
+ <ctl name="SLIM TX6 MUX" value="DEC6" />
+ <ctl name="ADC MUX6" value="DMIC" />
+ <ctl name="DMIC MUX6" value="DMIC2" />
+ <ctl name="SLIM TX8 MUX" value="DEC8" />
+ <ctl name="ADC MUX8" value="DMIC" />
+ <ctl name="DMIC MUX8" value="DMIC4" />
+ <ctl name="SLIM TX9 MUX" value="DEC7" />
+ <ctl name="ADC MUX7" value="DMIC" />
+ <ctl name="DMIC MUX7" value="DMIC0" />
+ <ctl name="IIR0 INP0 MUX" value="DEC6" />
+ </path>
+
+ <path name="aanc-fluence-dmic-handset">
+ <path name="aanc-handset-mic" />
+ </path>
+
+ <!-- Dual MIC devices -->
+ <path name="handset-dmic-endfire">
+ <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="DMIC2" />
+ <ctl name="SLIM TX8 MUX" value="DEC8" />
+ <ctl name="ADC MUX8" value="DMIC" />
+ <ctl name="DMIC MUX8" value="DMIC4" />
+ <ctl name="SLIM_0_TX Channels" value="Two" />
+ </path>
+
+ <path name="speaker-dmic-endfire">
+ <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="DMIC1" />
+ <ctl name="SLIM TX8 MUX" value="DEC8" />
+ <ctl name="ADC MUX8" value="DMIC" />
+ <ctl name="DMIC MUX8" value="DMIC5" />
+ <ctl name="SLIM_0_TX Channels" value="Two" />
+ </path>
+
+ <path name="dmic-endfire">
+ <path name="handset-dmic-endfire" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <path name="dmic-endfire-liquid">
+ <path name="handset-dmic-endfire" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </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="AIF1_CAP Mixer SLIM TX7" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX8" value="1" />
+ <ctl name="SLIM_0_TX Channels" value="Two" />
+ <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="DMIC2" />
+ </path>
+
+ <path name="dmic-broadside">
+ <path name="speaker-dmic-broadside" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <path name="voice-speaker-dmic-broadside">
+ <path name="dmic-broadside" />
+ </path>
+
+ <!-- Quad MIC devices -->
+ <path name="speaker-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="DMIC1" />
+ <ctl name="SLIM TX6 MUX" value="DEC6" />
+ <ctl name="ADC MUX6" value="DMIC" />
+ <ctl name="DMIC MUX6" value="DMIC0" />
+ <ctl name="SLIM TX7 MUX" value="DEC7" />
+ <ctl name="ADC MUX7" value="DMIC" />
+ <ctl name="DMIC MUX7" value="DMIC2" />
+ <ctl name="SLIM TX8 MUX" value="DEC8" />
+ <ctl name="ADC MUX8" value="DMIC" />
+ <ctl name="DMIC MUX8" value="DMIC5" />
+ </path>
+
+ <path name="speaker-qmic-liquid">
+ <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="DMIC3" />
+ <ctl name="SLIM TX6 MUX" value="DEC6" />
+ <ctl name="ADC MUX6" value="DMIC" />
+ <ctl name="DMIC MUX6" value="DMIC1" />
+ <ctl name="SLIM TX7 MUX" value="DEC7" />
+ <ctl name="ADC MUX7" value="DMIC" />
+ <ctl name="DMIC MUX7" value="DMIC4" />
+ <ctl name="SLIM TX8 MUX" value="DEC8" />
+ <ctl name="ADC MUX8" value="AMIC" />
+ <ctl name="AMIC MUX8" value="ADC1" />
+ </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="SLIM RX2 MUX" value="AIF4_PB" />
+ <ctl name="SLIM_6_RX Channels" value="One" />
+ <ctl name="RX INT1_1 MIX1 INP0" value="RX2" />
+ <ctl name="RX INT1 DEM MUX" value="CLSH_DSM_OUT" />
+ </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" />
+ <ctl name="ADC2 Volume" value="12" />
+ </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="dmic1" />
+ </path>
+
+ <path name="listen-handset-mic">
+ <ctl name="MADONOFF Switch" value="1" />
+ <ctl name="MAD Input" value="DMIC2" />
+ </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="SLIMBUS_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/msmpeafowl/mixer_paths_tashalite.xml b/configs/msmpeafowl/mixer_paths_tashalite.xml
new file mode 100644
index 0000000..33cb226
--- /dev/null
+++ b/configs/msmpeafowl/mixer_paths_tashalite.xml
@@ -0,0 +1,2617 @@
+<?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, -->
+<!-- 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="LINEOUT1 Volume" value="13" />
+ <ctl name="LINEOUT2 Volume" value="13" />
+ <ctl name="LINEOUT3 Volume" value="13" />
+ <ctl name="LINEOUT4 Volume" value="13" />
+ <ctl name="HPHL Volume" value="20" />
+ <ctl name="HPHR Volume" value="20" />
+ <ctl name="RX0 Digital Volume" value="84" />
+ <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="RX6 Digital Volume" value="84" />
+ <ctl name="RX7 Digital Volume" value="84" />
+ <ctl name="RX8 Digital Volume" value="84" />
+ <ctl name="ADC1 Volume" value="12" />
+ <ctl name="ADC2 Volume" value="12" />
+ <ctl name="ADC3 Volume" value="0" />
+ <ctl name="ADC4 Volume" value="0" />
+ <ctl name="ADC5 Volume" value="12" />
+ <ctl name="ADC6 Volume" value="12" />
+ <ctl name="DEC0 Volume" value="84" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="DEC2 Volume" value="84" />
+ <ctl name="DEC3 Volume" value="84" />
+ <ctl name="DEC4 Volume" value="84" />
+ <ctl name="DEC5 Volume" value="84" />
+ <ctl name="DEC6 Volume" value="84" />
+ <ctl name="DEC7 Volume" value="84" />
+ <ctl name="DEC8 Volume" value="84" />
+ <ctl name="COMP1 Switch" value="1" />
+ <ctl name="COMP2 Switch" value="1" />
+ <ctl name="COMP7 Switch" value="0" />
+ <ctl name="COMP8 Switch" value="0" />
+ <ctl name="RX HPH Mode" value="CLS_H_LP" />
+ <ctl name="SLIMBUS_3_RX Port Mixer MI2S_TX" value="0" />
+ <ctl name="SLIMBUS_0_RX Port Mixer SLIM_0_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 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="SLIMBUS_6_RX Port Mixer SLIM_0_TX" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia1" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia5" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia7" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia10" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia11" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia12" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia13" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia14" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia15" value="0" />
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia16" value="0" />
+ <ctl name="SLIMBUS_4_RX Audio Mixer MultiMedia1" value="0" />
+ <ctl name="SLIMBUS_4_RX Audio Mixer MultiMedia2" value="0" />
+ <ctl name="MultiMedia5 Mixer SLIM_0_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="MultiMedia4 Mixer MI2S_TX" value="0" />
+ <ctl name="MultiMedia1 Mixer MI2S_TX" value="0" />
+ <ctl name="MultiMedia7 Mixer MI2S_TX" value="0" />
+ <ctl name="MultiMedia10 Mixer MI2S_TX" value="0" />
+ <ctl name="MultiMedia11 Mixer MI2S_TX" value="0" />
+ <ctl name="MultiMedia12 Mixer MI2S_TX" value="0" />
+ <ctl name="MultiMedia13 Mixer MI2S_TX" value="0" />
+ <ctl name="MultiMedia14 Mixer MI2S_TX" value="0" />
+ <ctl name="MultiMedia15 Mixer MI2S_TX" value="0" />
+ <ctl name="MultiMedia16 Mixer MI2S_TX" value="0" />
+ <ctl name="MultiMedia1 Mixer SLIM_0_TX" value="0" />
+ <ctl name="MultiMedia1 Mixer SLIM_4_TX" value="0" />
+ <ctl name="MultiMedia1 Mixer SLIM_7_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" />
+ <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="SLIMBUS_0_RX Audio Mixer MultiMedia1" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia1" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia2" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia2" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia3" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia3" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia5" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia5" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia7" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia7" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia7" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia10" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia10" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia10" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia11" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia11" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia11" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia12" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia12" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia12" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia13" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia13" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia13" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia14" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia14" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia14" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia15" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia15" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia15" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia16" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia16" value="0" />
+ <ctl name="SLIMBUS_6_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 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="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 SLIM_0_TX" value="0" />
+ <ctl name="IIR0 INP0 MUX" value="ZERO" />
+ <ctl name="IIR0 INP1 MUX" value="ZERO" />
+ <ctl name="IIR0 INP2 MUX" value="ZERO" />
+ <ctl name="IIR1 INP0 MUX" value="ZERO" />
+ <ctl name="IIR1 INP1 MUX" value="ZERO" />
+ <ctl name="IIR1 INP2 MUX" value="ZERO" />
+ <ctl name="SLIM0_RX_VI_FB_LCH_MUX" value="ZERO" />
+ <ctl name="SLIM0_RX_VI_FB_RCH_MUX" value="ZERO" />
+ <ctl name="VI_FEED_TX Channels" value="Two" />
+ <ctl name="AIF4_VI Mixer SPKR_VI_1" value="0" />
+ <ctl name="AIF4_VI Mixer SPKR_VI_2" value="0" />
+ <ctl name="SLIM TX13 MUX" value="ZERO" />
+ <ctl name="SLIM TX10 MUX" value="ZERO" />
+ <ctl name="SLIM TX9 MUX" value="ZERO" />
+ <ctl name="SLIM TX8 MUX" value="ZERO" />
+ <ctl name="SLIM TX7 MUX" value="ZERO" />
+ <ctl name="SLIM TX6 MUX" value="ZERO" />
+ <ctl name="SLIM TX5 MUX" value="ZERO" />
+ <ctl name="SLIM TX4 MUX" value="ZERO" />
+ <ctl name="SLIM TX3 MUX" value="ZERO" />
+ <ctl name="SLIM TX2 MUX" value="ZERO" />
+ <ctl name="SLIM TX1 MUX" value="ZERO" />
+ <ctl name="SLIM TX0 MUX" value="ZERO" />
+ <ctl name="ADC MUX13" value="AMIC" />
+ <ctl name="ADC MUX12" value="AMIC" />
+ <ctl name="ADC MUX11" value="AMIC" />
+ <ctl name="ADC MUX10" value="AMIC" />
+ <ctl name="ADC MUX8" value="AMIC" />
+ <ctl name="ADC MUX7" value="AMIC" />
+ <ctl name="ADC MUX6" value="AMIC" />
+ <ctl name="ADC MUX5" value="AMIC" />
+ <ctl name="ADC MUX4" value="AMIC" />
+ <ctl name="ADC MUX3" value="AMIC" />
+ <ctl name="ADC MUX2" value="AMIC" />
+ <ctl name="ADC MUX1" value="AMIC" />
+ <ctl name="ADC MUX0" value="AMIC" />
+ <ctl name="DMIC MUX0" value="ZERO" />
+ <ctl name="DMIC MUX1" value="ZERO" />
+ <ctl name="DMIC MUX2" value="ZERO" />
+ <ctl name="DMIC MUX3" value="ZERO" />
+ <ctl name="DMIC MUX4" value="ZERO" />
+ <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="DMIC MUX10" value="ZERO" />
+ <ctl name="DMIC MUX11" value="ZERO" />
+ <ctl name="DMIC MUX12" value="ZERO" />
+ <ctl name="DMIC MUX13" value="ZERO" />
+ <ctl name="AMIC MUX0" value="ZERO" />
+ <ctl name="AMIC MUX1" value="ZERO" />
+ <ctl name="AMIC MUX2" value="ZERO" />
+ <ctl name="AMIC MUX3" value="ZERO" />
+ <ctl name="AMIC MUX4" value="ZERO" />
+ <ctl name="AMIC MUX5" value="ZERO" />
+ <ctl name="AMIC MUX6" value="ZERO" />
+ <ctl name="AMIC MUX7" value="ZERO" />
+ <ctl name="AMIC MUX8" value="ZERO" />
+ <ctl name="AMIC MUX10" value="ZERO" />
+ <ctl name="AMIC MUX11" value="ZERO" />
+ <ctl name="AMIC MUX12" value="ZERO" />
+ <ctl name="AMIC MUX13" value="ZERO" />
+ <ctl name="RX INT0_1 MIX1 INP0" value="ZERO" />
+ <ctl name="RX INT1_1 MIX1 INP0" value="ZERO" />
+ <ctl name="RX INT2_1 MIX1 INP0" value="ZERO" />
+ <ctl name="RX INT3_1 MIX1 INP0" value="ZERO" />
+ <ctl name="RX INT4_1 MIX1 INP0" value="ZERO" />
+ <ctl name="RX INT5_1 MIX1 INP0" value="ZERO" />
+ <ctl name="RX INT6_1 MIX1 INP0" value="ZERO" />
+ <ctl name="RX INT7_1 MIX1 INP0" value="ZERO" />
+ <ctl name="RX INT8_1 MIX1 INP0" value="ZERO" />
+ <ctl name="RX INT0_1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX INT1_1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX INT2_1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX INT3_1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX INT4_1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX INT5_1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX INT6_1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX INT7_1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX INT8_1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX INT0_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT1_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT2_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT3_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT4_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT5_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT6_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT7_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT8_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT0_2 MUX" value="ZERO" />
+ <ctl name="RX INT1_2 MUX" value="ZERO" />
+ <ctl name="RX INT2_2 MUX" value="ZERO" />
+ <ctl name="RX INT3_2 MUX" value="ZERO" />
+ <ctl name="RX INT4_2 MUX" value="ZERO" />
+ <ctl name="RX INT5_2 MUX" value="ZERO" />
+ <ctl name="RX INT6_2 MUX" value="ZERO" />
+ <ctl name="RX INT7_2 MUX" value="ZERO" />
+ <ctl name="RX INT8_2 MUX" value="ZERO" />
+ <ctl name="SPL SRC0 MUX" value="ZERO" />
+ <ctl name="SPL SRC1 MUX" value="ZERO" />
+ <ctl name="SPL SRC2 MUX" value="ZERO" />
+ <ctl name="SPL SRC3 MUX" value="ZERO" />
+ <ctl name="RX INT1 SPLINE MIX HPHL Switch" value="0" />
+ <ctl name="RX INT3 SPLINE MIX LO1 Switch" value="0" />
+ <ctl name="RX INT2 SPLINE MIX HPHR Switch" value="0" />
+ <ctl name="RX INT4 SPLINE MIX LO2 Switch" value="0" />
+ <ctl name="RX INT5 SPLINE MIX LO3 Switch" value="0" />
+ <ctl name="RX INT6 SPLINE MIX LO4 Switch" value="0" />
+ <ctl name="RX INT7 SPLINE MIX SPKRL Switch" value="0" />
+ <ctl name="RX INT8 SPLINE MIX SPKRR Switch" value="0" />
+ <ctl name="RX MIX TX0 MUX" value="ZERO" />
+ <ctl name="RX MIX TX1 MUX" value="ZERO" />
+ <ctl name="RX MIX TX2 MUX" value="ZERO" />
+ <ctl name="RX MIX TX3 MUX" value="ZERO" />
+ <ctl name="RX MIX TX4 MUX" value="ZERO" />
+ <ctl name="RX MIX TX5 MUX" value="ZERO" />
+ <ctl name="RX MIX TX6 MUX" value="ZERO" />
+ <ctl name="RX MIX TX7 MUX" value="ZERO" />
+ <ctl name="RX MIX TX8 MUX" value="ZERO" />
+ <ctl name="IIR0 INP0 MUX" value="ZERO" />
+ <ctl name="IIR0 INP1 MUX" value="ZERO" />
+ <ctl name="IIR0 INP2 MUX" value="ZERO" />
+ <ctl name="IIR0 INP3 MUX" value="ZERO" />
+ <ctl name="IIR1 INP0 MUX" value="ZERO" />
+ <ctl name="IIR1 INP1 MUX" value="ZERO" />
+ <ctl name="IIR1 INP2 MUX" value="ZERO" />
+ <ctl name="IIR1 INP3 MUX" value="ZERO" />
+ <ctl name="RX INT0 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX INT1 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX INT2 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="SLIM_0_RX Channels" value="One" />
+ <ctl name="SLIM_5_RX Channels" value="One" />
+ <ctl name="SLIM_0_TX Channels" value="One" />
+ <ctl name="SLIM_1_TX Channels" value="One" />
+ <ctl name="SLIM RX0 MUX" value="ZERO" />
+ <ctl name="SLIM RX2 MUX" value="ZERO" />
+ <ctl name="SLIM RX3 MUX" value="ZERO" />
+ <ctl name="SLIM RX4 MUX" value="ZERO" />
+ <ctl name="SLIM RX5 MUX" value="ZERO" />
+ <ctl name="EAR PA Gain" value="G_6_DB" />
+ <ctl name="EAR SPKR PA Gain" value="G_DEFAULT" />
+ <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="SLIM RX1 MUX" value="ZERO" />
+ <ctl name="AIF1_CAP Mixer SLIM TX7" value="0" />
+ <ctl name="AIF1_CAP Mixer SLIM TX8" value="0"/>
+ <ctl name="AIF1_CAP Mixer SLIM TX6" value="0" />
+ <ctl name="AIF1_CAP Mixer SLIM TX5" value="0"/>
+ <ctl name="AIF1_CAP Mixer SLIM TX4" value="0" />
+ <ctl name="AIF1_CAP Mixer SLIM TX3" value="0"/>
+ <ctl name="AIF1_CAP Mixer SLIM TX2" value="0" />
+ <ctl name="AIF1_CAP Mixer SLIM TX1" value="0"/>
+ <ctl name="AIF1_CAP Mixer SLIM TX0" value="0"/>
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="SLIMBUS_6_RX Port Mixer AUX_PCM_UL_TX" value="0" />
+ <ctl name= "RX INT1_1 NATIVE MUX" value="OFF" />
+ <ctl name= "RX INT2_1 NATIVE MUX" value="OFF" />
+ <ctl name= "RX INT3_1 NATIVE MUX" value="OFF" />
+ <ctl name= "RX INT4_1 NATIVE MUX" value="OFF" />
+ <!-- HFP start -->
+ <ctl name="HFP_SLIM7_UL_HL Switch" value="0" />
+ <ctl name="SLIMBUS_0_RX Port Mixer SLIM_7_TX" value="0" />
+ <ctl name="SLIMBUS_6_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="SLIMBUS_0_RX Port Mixer SLIM_8_TX" value="0" />
+ <ctl name="SLIMBUS_DL_HL Switch" value="0" />
+ <ctl name="SLIMBUS_6_RX Port Mixer SLIM_8_TX" value="0" />
+ <ctl name="SLIMBUS6_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="SLIM_0_RX_Voice Mixer VoiceMMode1" value="0" />
+ <ctl name="SLIM_6_RX_Voice Mixer VoiceMMode1" value="0" />
+ <ctl name="VoiceMMode1_Tx Mixer SLIM_0_TX_MMode1" 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="SLIM_0_RX_Voice Mixer VoiceMMode2" value="0" />
+ <ctl name="SLIM_6_RX_Voice Mixer VoiceMMode2" value="0" />
+ <ctl name="VoiceMMode2_Tx Mixer SLIM_0_TX_MMode2" 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" />
+ <ctl name="AIF3_CAP Mixer SLIM TX1" value="0" />
+ <ctl name="AIF3_CAP Mixer SLIM TX2" value="0" />
+ <!-- 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="SLIM_0_RX_Voice Mixer Voip" value="0" />
+ <ctl name="SLIM_6_RX_Voice Mixer Voip" value="0" />
+ <ctl name="Voip_Tx Mixer SLIM_0_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-->
+
+ <!-- VoWLAN start -->
+ <ctl name="SLIM_0_RX_Voice Mixer VoWLAN" value="0" />
+ <ctl name="SLIM_6_RX_Voice Mixer VoWLAN" value="0" />
+ <ctl name="VoWLAN_Tx Mixer SLIM_0_TX_VoWLAN" value="0" />
+ <ctl name="SLIM_7_RX_Voice Mixer VoWLAN" value="0" />
+ <ctl name="VoWLAN_Tx Mixer SLIM_7_TX_VoWLAN" value="0" />
+ <ctl name="AFE_PCM_RX_Voice Mixer VoWLAN" value="0" />
+ <ctl name="VoWLAN_Tx Mixer AFE_PCM_TX_VoWLAN" value="0" />
+ <ctl name="USB_AUDIO_RX_Voice Mixer VoWLAN" value="0" />
+ <ctl name="VoWLAN_Tx Mixer USB_AUDIO_TX_VoWLAN" value="0" />
+ <!-- VoWLAN 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" />
+ <!-- IIR/voice anc -->
+ <ctl name="IIR0 Band1" id ="0" value="268435456" />
+ <ctl name="IIR0 Band1" id ="1" value="0" />
+ <ctl name="IIR0 Band1" id ="2" value="0" />
+ <ctl name="IIR0 Band1" id ="3" value="0" />
+ <ctl name="IIR0 Band1" id ="4" value="0" />
+ <ctl name="IIR0 Band2" id ="0" value="268435456" />
+ <ctl name="IIR0 Band2" id ="1" value="0" />
+ <ctl name="IIR0 Band2" id ="2" value="0" />
+ <ctl name="IIR0 Band2" id ="3" value="0" />
+ <ctl name="IIR0 Band2" id ="4" value="0" />
+ <ctl name="IIR0 Band3" id ="0" value="268435456" />
+ <ctl name="IIR0 Band3" id ="1" value="0" />
+ <ctl name="IIR0 Band3" id ="2" value="0" />
+ <ctl name="IIR0 Band3" id ="3" value="0" />
+ <ctl name="IIR0 Band3" id ="4" value="0" />
+ <ctl name="IIR0 Band4" id ="0" value="268435456" />
+ <ctl name="IIR0 Band4" id ="1" value="0" />
+ <ctl name="IIR0 Band4" id ="2" value="0" />
+ <ctl name="IIR0 Band4" id ="3" value="0" />
+ <ctl name="IIR0 Band4" id ="4" value="0" />
+ <ctl name="IIR0 Band5" id ="0" value="268435456" />
+ <ctl name="IIR0 Band5" id ="1" value="0" />
+ <ctl name="IIR0 Band5" id ="2" value="0" />
+ <ctl name="IIR0 Band5" id ="3" value="0" />
+ <ctl name="IIR0 Band5" id ="4" value="0" />
+ <ctl name="IIR0 Enable Band1" value="0" />
+ <ctl name="IIR0 Enable Band2" value="0" />
+ <ctl name="IIR0 Enable Band3" value="0" />
+ <ctl name="IIR0 Enable Band4" value="0" />
+ <ctl name="IIR0 Enable Band5" value="0" />
+ <ctl name="IIR0 INP0 Volume" value="54" />
+ <!-- IIR/voice anc end -->
+ <!-- anc handset -->
+ <ctl name="ANC Slot" value="0" />
+ <ctl name="ANC0 FB MUX" value="ZERO" />
+ <ctl name="ANC1 FB MUX" value="ZERO" />
+ <ctl name="ANC EAR Enable Switch" value="0" />
+ <ctl name="ANC OUT EAR SPKR Enable Switch" value="0" />
+ <ctl name="ANC SPKR PA Enable Switch" value="0" />
+ <ctl name="SpkrLeft WSA PA Gain" value="G_0_DB" />
+ <!-- anc handset end -->
+ <ctl name="ANC Function" value="OFF" />
+ <ctl name="ANC HPHL Enable Switch" value="0" />
+ <ctl name="ANC HPHR Enable Switch" value="0" />
+ <!-- anc headset end-->
+ <!-- aanc handset mic -->
+ <ctl name="AIF1_CAP Mixer SLIM TX9" value="0" />
+ <ctl name="AANC_SLIM_0_RX MUX" value="ZERO" />
+ <!-- aanc handset mic end -->
+ <!-- ssr qmic -->
+ <ctl name="AIF1_CAP Mixer SLIM TX10" value="0" />
+ <!-- ssr qmic end-->
+ <!-- audio record compress-->
+ <ctl name="MultiMedia8 Mixer SLIM_0_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-->
+ <!-- listen -->
+ <ctl name="LSM1 MUX" value="None" />
+ <ctl name="LSM2 MUX" value="None" />
+ <ctl name="LSM3 MUX" value="None" />
+ <ctl name="LSM4 MUX" value="None" />
+ <ctl name="LSM5 MUX" value="None" />
+ <ctl name="LSM6 MUX" value="None" />
+ <ctl name="LSM7 MUX" value="None" />
+ <ctl name="LSM8 MUX" value="None" />
+ <ctl name="SLIMBUS_5_TX LSM Function" value="None" />
+ <!-- listen 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="SLIMBUS_DL_HL Switch" value="0" />
+ <ctl name="SLIMBUS6_DL_HL Switch" value="0" />
+ <!-- ADSP testfwk end-->
+
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia3" value="0" />
+
+ <!-- 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">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_RX" />
+ </path>
+
+ <path name="echo-reference headphones">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_6_RX" />
+ </path>
+
+ <path name="echo-reference headphones-44.1">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_1_TX" />
+ </path>
+
+ <path name="deep-buffer-playback">
+ <ctl name="SLIMBUS_0_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 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="SLIMBUS_6_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="SLIMBUS_0_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 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="SLIMBUS_6_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="SLIMBUS_0_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="SLIMBUS_6_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 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 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="SLIMBUS_0_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 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="SLIMBUS_6_RX Audio Mixer MultiMedia4" value="1" />
+ </path>
+
+ <path name="compress-offload-playback headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia4" value="1" />
+ </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="SLIMBUS_0_RX Audio 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="SLIMBUS_6_RX Audio Mixer MultiMedia7" value="1" />
+ </path>
+
+ <path name="compress-offload-playback2 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia7" value="1" />
+ </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="SLIMBUS_0_RX Audio 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="SLIMBUS_6_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="compress-offload-playback3 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia10" value="1" />
+ </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="SLIMBUS_0_RX Audio 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="SLIMBUS_6_RX Audio Mixer MultiMedia11" value="1" />
+ </path>
+
+ <path name="compress-offload-playback4 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia11" value="1" />
+ </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="SLIMBUS_0_RX Audio 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="SLIMBUS_6_RX Audio Mixer MultiMedia12" value="1" />
+ </path>
+
+ <path name="compress-offload-playback5 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia12" value="1" />
+ </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="SLIMBUS_0_RX Audio 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="SLIMBUS_6_RX Audio Mixer MultiMedia13" value="1" />
+ </path>
+
+ <path name="compress-offload-playback6 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia13" value="1" />
+ </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="SLIMBUS_0_RX Audio 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="SLIMBUS_6_RX Audio Mixer MultiMedia14" value="1" />
+ </path>
+
+ <path name="compress-offload-playback7 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia14" value="1" />
+ </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="SLIMBUS_0_RX Audio 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="SLIMBUS_6_RX Audio Mixer MultiMedia15" value="1" />
+ </path>
+
+ <path name="compress-offload-playback8 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia15" value="1" />
+ </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="SLIMBUS_0_RX Audio 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="SLIMBUS_6_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="compress-offload-playback9 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia16" value="1" />
+ </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 SLIM_0_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 SLIM_0_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 SLIM_0_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="SLIMBUS_0_RX Port Mixer SLIM_8_TX" value="1" />
+ <ctl name="SLIMBUS_DL_HL Switch" value="1" />
+ </path>
+
+ <path name="play-fm headphones">
+ <ctl name="SLIMBUS_8 LOOPBACK Volume" value="1" />
+ <ctl name="SLIMBUS_6_RX Port Mixer SLIM_8_TX" value="1" />
+ <ctl name="SLIMBUS6_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="SLIMBUS_0_RX Port Mixer SLIM_7_TX" value="1" />
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia6" value="1" />
+ <ctl name="MultiMedia6 Mixer SLIM_0_TX" value="1" />
+ <ctl name="SLIMBUS_DL_HL Switch" value="1" />
+ </path>
+
+ <path name="hfp-sco headphones">
+ <ctl name="HFP_SLIM7_UL_HL Switch" value="1" />
+ <ctl name="SLIMBUS_6_RX Port Mixer SLIM_7_TX" value="1" />
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia6" value="1" />
+ <ctl name="MultiMedia6 Mixer SLIM_0_TX" value="1" />
+ <ctl name="SLIMBUS6_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="SLIM_0_RX_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer SLIM_0_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 SLIM_0_TX_Voip" value="1" />
+ </path>
+
+ <path name="compress-voip-call headphones">
+ <ctl name="SLIM_6_RX_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer SLIM_0_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 SLIM_0_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="vowlan-call">
+ <ctl name="SLIM_0_RX_Voice Mixer VoWLAN" value="1" />
+ <ctl name="VoWLAN_Tx Mixer SLIM_0_TX_VoWLAN" value="1" />
+ </path>
+
+ <path name="vowlan-call headphones">
+ <ctl name="SLIM_6_RX_Voice Mixer VoWLAN" value="1" />
+ <ctl name="VoWLAN_Tx Mixer SLIM_0_TX_VoWLAN" value="1" />
+ </path>
+
+ <path name="vowlan-call bt-sco">
+ <ctl name="SLIM_7_RX_Voice Mixer VoWLAN" value="1" />
+ <ctl name="VoWLAN_Tx Mixer SLIM_7_TX_VoWLAN" value="1" />
+ </path>
+
+ <path name="vowlan-call bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="vowlan-call bt-sco" />
+ </path>
+
+ <path name="vowlan-call afe-proxy">
+ <ctl name="AFE_PCM_RX_Voice Mixer VoWLAN" value="1" />
+ <ctl name="VoWLAN_Tx Mixer AFE_PCM_TX_VoWLAN" value="1" />
+ </path>
+
+ <path name="vowlan-call usb-headphones">
+ <ctl name="USB_AUDIO_RX_Voice Mixer VoWLAN" value="1" />
+ <ctl name="VoWLAN_Tx Mixer SLIM_0_TX_VoWLAN" value="1" />
+ </path>
+
+ <path name="vowlan-call usb-headset">
+ <ctl name="USB_AUDIO_RX_Voice Mixer VoWLAN" value="1" />
+ <ctl name="VoWLAN_Tx Mixer USB_AUDIO_TX_VoWLAN" value="1" />
+ </path>
+
+ <path name="voicemmode1-call">
+ <ctl name="SLIM_0_RX_Voice Mixer VoiceMMode1" value="1" />
+ <ctl name="VoiceMMode1_Tx Mixer SLIM_0_TX_MMode1" value="1" />
+ </path>
+
+ <path name="voicemmode1-call headphones">
+ <ctl name="SLIM_6_RX_Voice Mixer VoiceMMode1" value="1" />
+ <ctl name="VoiceMMode1_Tx Mixer SLIM_0_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 SLIM_0_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="voicemmode2-call">
+ <ctl name="SLIM_0_RX_Voice Mixer VoiceMMode2" value="1" />
+ <ctl name="VoiceMMode2_Tx Mixer SLIM_0_TX_MMode2" value="1" />
+ </path>
+
+ <path name="voicemmode2-call headphones">
+ <ctl name="SLIM_6_RX_Voice Mixer VoiceMMode2" value="1" />
+ <ctl name="VoiceMMode2_Tx Mixer SLIM_0_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 SLIM_0_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="listen-voice-wakeup-1">
+ <ctl name="LSM1 MUX" value="SLIMBUS_5_TX" />
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ </path>
+ <path name="listen-voice-wakeup-2">
+ <ctl name="LSM2 MUX" value="SLIMBUS_5_TX" />
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ </path>
+ <path name="listen-voice-wakeup-3">
+ <ctl name="LSM3 MUX" value="SLIMBUS_5_TX" />
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ </path>
+ <path name="listen-voice-wakeup-4">
+ <ctl name="LSM4 MUX" value="SLIMBUS_5_TX" />
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ </path>
+ <path name="listen-voice-wakeup-5">
+ <ctl name="LSM5 MUX" value="SLIMBUS_5_TX" />
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ </path>
+ <path name="listen-voice-wakeup-6">
+ <ctl name="LSM6 MUX" value="SLIMBUS_5_TX" />
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ </path>
+ <path name="listen-voice-wakeup-7">
+ <ctl name="LSM7 MUX" value="SLIMBUS_5_TX" />
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ </path>
+ <path name="listen-voice-wakeup-8">
+ <ctl name="LSM8 MUX" value="SLIMBUS_5_TX" />
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ </path>
+
+ <path name="spkr-rx-calib">
+ <ctl name="SLIMBUS_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="AIF1_CAP Mixer SLIM TX6" value="1"/>
+ <ctl name="SLIM_0_TX Channels" value="One" />
+ <ctl name="SLIM TX6 MUX" value="DEC6" />
+ <ctl name="ADC MUX6" value="AMIC" />
+ <ctl name="AMIC MUX6" value="ADC1" />
+ <ctl name="IIR0 INP0 MUX" value="DEC6" />
+ </path>
+
+ <path name="adc2">
+ <ctl name="AIF1_CAP Mixer SLIM TX0" value="1"/>
+ <ctl name="SLIM_0_TX Channels" value="One" />
+ <ctl name="SLIM TX0 MUX" value="DEC0" />
+ <ctl name="ADC MUX0" value="AMIC" />
+ <ctl name="AMIC MUX0" value="ADC2" />
+ <ctl name="IIR0 INP0 MUX" value="DEC0" />
+ </path>
+
+ <path name="adc5">
+ <ctl name="AIF1_CAP Mixer SLIM TX5" value="1"/>
+ <ctl name="SLIM_0_TX Channels" value="One" />
+ <ctl name="SLIM TX5 MUX" value="DEC5" />
+ <ctl name="ADC MUX5" value="AMIC" />
+ <ctl name="AMIC MUX5" value="ADC5" />
+ <ctl name="IIR0 INP0 MUX" value="DEC5" />
+ </path>
+
+ <path name="adc6">
+ <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="AMIC" />
+ <ctl name="AMIC MUX7" value="ADC6" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <!-- For Tasha, DMIC numbered from 0 to 5 -->
+ <path name="dmic1">
+ <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="dmic2">
+ <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="DMIC1" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <path name="dmic3">
+ <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="DMIC2" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <path name="dmic4">
+ <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="DMIC3" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <path name="dmic5">
+ <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="DMIC4" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <path name="dmic6">
+ <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="DMIC5" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <path name="speaker">
+ <ctl name="COMP7 Switch" value="1" />
+ <ctl name="COMP8 Switch" value="1" />
+ <ctl name="SLIM RX0 MUX" value="AIF_MIX1_PB" />
+ <ctl name="SLIM RX1 MUX" value="AIF_MIX1_PB" />
+ <ctl name="SLIM_0_RX Channels" value="Two" />
+ <ctl name="RX INT7_1 MIX1 INP0" value="RX0" />
+ <ctl name="RX INT8_1 MIX1 INP0" value="RX1" />
+ <ctl name="SpkrLeft COMP Switch" value="1" />
+ <ctl name="SpkrRight COMP Switch" value="1" />
+ <ctl name="SpkrLeft BOOST Switch" value="1" />
+ <ctl name="SpkrRight BOOST Switch" value="1" />
+ <ctl name="SpkrLeft VISENSE Switch" value="1" />
+ <ctl name="SpkrRight VISENSE Switch" value="1" />
+ <ctl name="SpkrLeft SWR DAC_Port Switch" value="1" />
+ <ctl name="SpkrRight SWR DAC_Port Switch" value="1" />
+ </path>
+
+ <path name="speaker-fluid">
+ <ctl name="COMP7 Switch" value="1" />
+ <ctl name="SLIM RX0 MUX" value="AIF_MIX1_PB" />
+ <ctl name="SLIM_0_RX Channels" value="One" />
+ <ctl name="RX INT7_1 MIX1 INP0" value="RX0" />
+ <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" />
+ </path>
+
+ <path name="speaker-mono">
+ <ctl name="COMP7 Switch" value="1" />
+ <ctl name="SLIM RX0 MUX" value="AIF_MIX1_PB" />
+ <ctl name="SLIM_0_RX Channels" value="One" />
+ <ctl name="RX INT7_1 MIX1 INP0" value="RX0" />
+ <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" />
+ </path>
+
+ <path name="speaker-mono-2">
+ <ctl name="COMP8 Switch" value="1" />
+ <ctl name="SLIM RX1 MUX" value="AIF_MIX1_PB" />
+ <ctl name="SLIM_0_RX Channels" value="One" />
+ <ctl name="RX INT8_1 MIX1 INP0" value="RX1" />
+ <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" />
+ </path>
+
+ <path name="speaker-liquid">
+ <path name="speaker" />
+ </path>
+
+ <path name="sidetone-iir">
+ <ctl name="IIR0 Enable Band1" value="1" />
+ <ctl name="IIR0 Enable Band2" value="1" />
+ <ctl name="IIR0 Enable Band3" value="1" />
+ <ctl name="IIR0 Enable Band4" value="1" />
+ <ctl name="IIR0 Enable Band5" value="1" />
+ </path>
+
+ <path name="sidetone-headphones">
+ <path name="sidetone-iir" />
+ <ctl name="IIR0 INP0 Volume" value="54" />
+ <ctl name="RX INT1 MIX2 INP" value="SRC0" />
+ <ctl name="RX INT2 MIX2 INP" value="SRC0" />
+ </path>
+
+ <path name="sidetone-handset">
+ <path name="sidetone-iir" />
+ <ctl name="IIR0 INP0 Volume" value="54" />
+ <ctl name="RX INT7 MIX2 INP" value="SRC0" />
+ </path>
+
+ <path name="speaker-mic">
+ <path name="dmic2" />
+ </path>
+
+ <path name="speaker-mic-liquid">
+ <path name="dmic2" />
+ <ctl name="DEC7 Volume" value="111" />
+ </path>
+
+ <path name="speaker-mic-sbc">
+ <path name="adc5" />
+ <ctl name="ADC5 Volume" value="12" />
+ </path>
+
+ <path name="speaker-protected">
+ <ctl name="AIF4_VI Mixer SPKR_VI_1" value="1" />
+ <ctl name="AIF4_VI Mixer SPKR_VI_2" value="1" />
+ <ctl name="SLIM_4_TX Format" value="PACKED_16B" />
+ <path name="speaker" />
+ <ctl name="VI_FEED_TX Channels" value="Two" />
+ <ctl name="SLIM0_RX_VI_FB_LCH_MUX" value="SLIM4_TX" />
+ <ctl name="SLIM0_RX_VI_FB_RCH_MUX" value="SLIM4_TX" />
+ </path>
+
+ <path name="voice-speaker-protected">
+ <ctl name="AIF4_VI Mixer SPKR_VI_1" value="1" />
+ <ctl name="SLIM_4_TX Format" value="PACKED_16B" />
+ <path name="speaker-mono" />
+ <ctl name="VI_FEED_TX Channels" value="One" />
+ <ctl name="SLIM0_RX_VI_FB_LCH_MUX" value="SLIM4_TX" />
+ </path>
+
+ <path name="voice-speaker-2-protected">
+ <ctl name="AIF4_VI Mixer SPKR_VI_2" value="1" />
+ <ctl name="SLIM_4_TX Format" value="PACKED_16B" />
+ <path name="speaker-mono-2" />
+ <ctl name="VI_FEED_TX Channels" value="One" />
+ <ctl name="SLIM0_RX_VI_FB_LCH_MUX" value="SLIM4_TX" />
+ </path>
+
+ <path name="vi-feedback">
+ </path>
+
+ <path name="vi-feedback-mono-1">
+ </path>
+
+ <path name="vi-feedback-mono-2">
+ </path>
+
+ <path name="handset">
+ <ctl name="COMP7 Switch" value="1" />
+ <ctl name="SLIM RX0 MUX" value="AIF_MIX1_PB" />
+ <ctl name="SLIM_0_RX Channels" value="One" />
+ <ctl name="RX INT7_1 MIX1 INP0" value="RX0" />
+ <ctl name="SpkrLeft COMP Switch" value="1" />
+ <ctl name="SpkrLeft BOOST Switch" value="1" />
+ <ctl name="SpkrLeft SWR DAC_Port Switch" value="1" />
+ <ctl name="EAR SPKR PA Gain" value="G_6_DB" />
+ </path>
+
+ <path name="handset-mic">
+ <path name="dmic3" />
+ </path>
+
+ <path name="handset-mic-db">
+ <path name="adc6" />
+ </path>
+
+ <path name="handset-mic-cdp">
+ <path name="adc1" />
+ <ctl name="ADC1 Volume" value="12" />
+ </path>
+
+ <path name="handset-mic-sbc">
+ <path name="adc5" />
+ <ctl name="ADC5 Volume" value="12" />
+ </path>
+
+ <path name="three-mic">
+ <ctl name="AIF1_CAP Mixer SLIM TX5" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX6" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX8" 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 TX8 MUX" value="DEC8" />
+ <ctl name="ADC MUX8" value="DMIC" />
+ <ctl name="DMIC MUX8" value="DMIC5" />
+ </path>
+
+ <path name="anc-handset">
+ <ctl name="ANC Function" value="ON" />
+ <ctl name="ANC Slot" value="6" />
+ <ctl name="SLIM RX0 MUX" value="AIF_MIX1_PB" />
+ <ctl name="SLIM_0_RX Channels" value="One" />
+ <ctl name="RX INT7_1 MIX1 INP0" value="RX0" />
+ <ctl name="ANC OUT EAR SPKR Enable Switch" value="1" />
+ <ctl name="ANC SPKR PA Enable Switch" value="1" />
+ <ctl name="SpkrLeft SWR DAC_Port Switch" value="1" />
+ <ctl name="SpkrLeft WSA PA Gain" value="G_6_DB" />
+ </path>
+
+ <path name="headphones">
+ <ctl name="SLIM RX2 MUX" value="AIF4_PB" />
+ <ctl name="SLIM RX3 MUX" value="AIF4_PB" />
+ <ctl name="SLIM_6_RX Channels" value="Two" />
+ <ctl name= "RX INT1_2 MUX" value="RX2" />
+ <ctl name= "RX INT2_2 MUX" value="RX3" />
+ <ctl name="RX INT1 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX INT2 DEM MUX" value="CLSH_DSM_OUT" />
+ </path>
+
+ <path name="headphones-44.1">
+ <ctl name="SLIM RX4 MUX" value="AIF3_PB" />
+ <ctl name="SLIM RX5 MUX" value="AIF3_PB" />
+ <ctl name="SLIM_5_RX Channels" value="Two" />
+ <ctl name="SLIM_5_RX SampleRate" value="KHZ_44P1" />
+ <ctl name="RX INT1_1 MIX1 INP0" value="RX4" />
+ <ctl name="RX INT2_1 MIX1 INP1" value="RX5" />
+ <ctl name="RX INT1 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX INT2 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="SPL SRC0 MUX" value="SRC_IN_HPHL" />
+ <ctl name="SPL SRC1 MUX" value="SRC_IN_HPHR" />
+ <ctl name="RX INT1 SPLINE MIX HPHL Switch" value="1" />
+ <ctl name="RX INT2 SPLINE MIX HPHR Switch" value="1" />
+ </path>
+
+
+ <path name="true-native-mode">
+ <ctl name="RX INT1_2 MUX" value="ZERO" />
+ <ctl name="RX INT2_2 MUX" value="ZERO" />
+ <ctl name= "RX INT1_1 MIX1 INP0" value="RX2" />
+ <ctl name= "RX INT2_1 MIX1 INP0" value="RX3" />
+ <ctl name= "RX INT1_1 NATIVE MUX" value="ON" />
+ <ctl name= "RX INT2_1 NATIVE MUX" value="ON" />
+ </path>
+
+ <path name="hph-highquality-mode">
+ <ctl name="RX HPH Mode" value="CLS_H_LOHIFI" />
+ </path>
+
+ <path name="hph-lowpower-mode">
+ <ctl name="RX HPH Mode" value="CLS_H_LP" />
+ </path>
+
+ <path name="line">
+ <path name="headphones" />
+ </path>
+
+ <path name="headset-mic">
+ <path name="adc2" />
+ <ctl name="ADC2 Volume" value="12" />
+ </path>
+
+ <path name="headset-mic-liquid">
+ <path name="adc2" />
+ <ctl name="ADC2 Volume" value="12" />
+ </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-headphones">
+ <path name="headphones" />
+ <ctl name="RX HPH Mode" value="CLS_H_LP" />
+ </path>
+
+ <path name="voice-line">
+ <path name="voice-headphones" />
+ </path>
+
+ <path name="voice-headset-mic">
+ <path name="headset-mic" />
+ <ctl name="ADC2 Volume" value="12" />
+ </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">
+ <ctl name="COMP1 Switch" value="0" />
+ <ctl name="COMP2 Switch" value="0" />
+ <ctl name="ANC Function" value="ON" />
+ <ctl name="ANC Slot" value="0" />
+ <ctl name="ADC MUX10" value="AMIC" />
+ <ctl name="AMIC MUX10" value="ADC3" />
+ <ctl name="ADC MUX12" value="AMIC" />
+ <ctl name="AMIC MUX12" value="ADC4" />
+ <ctl name="ANC0 FB MUX" value="ANC_IN_HPHL" />
+ <ctl name="ANC1 FB MUX" value="ANC_IN_HPHR" />
+ <ctl name="ADC3 Volume" value="8" />
+ <ctl name="ADC4 Volume" value="8" />
+ <ctl name="SLIM RX2 MUX" value="AIF4_PB" />
+ <ctl name="SLIM RX3 MUX" value="AIF4_PB" />
+ <ctl name="SLIM_6_RX Channels" value="Two" />
+ <ctl name="RX INT1_1 MIX1 INP0" value="RX2" />
+ <ctl name="RX INT2_1 MIX1 INP0" value="RX3" />
+ <ctl name="RX INT1 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX INT2 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ <ctl name="RX2 Digital Volume" value="84" />
+ <ctl name="ANC HPHL Enable Switch" value="1" />
+ <ctl name="ANC HPHR Enable Switch" value="1" />
+ <ctl name="HPHL Volume" value="20" />
+ <ctl name="HPHR Volume" value="20" />
+ </path>
+
+ <path name="speaker-and-anc-headphones">
+ <path name="anc-headphones" />
+ <path name="speaker" />
+ </path>
+
+ <path name="anc-fb-headphones">
+ <path name="anc-headphones" />
+ <ctl name="ANC Slot" value="1" />
+ </path>
+
+ <path name="speaker-and-anc-fb-headphones">
+ <path name="anc-fb-headphones" />
+ <path name="speaker" />
+ </path>
+
+ <path name="voice-anc-headphones">
+ <ctl name="COMP1 Switch" value="0" />
+ <ctl name="COMP2 Switch" value="0" />
+ <ctl name="ANC Function" value="ON" />
+ <ctl name="ANC Slot" value="0" />
+ <ctl name="ADC MUX10" value="AMIC" />
+ <ctl name="AMIC MUX10" value="ADC3" />
+ <ctl name="ADC MUX12" value="AMIC" />
+ <ctl name="AMIC MUX12" value="ADC4" />
+ <ctl name="ANC0 FB MUX" value="ANC_IN_HPHL" />
+ <ctl name="ANC1 FB MUX" value="ANC_IN_HPHR" />
+ <ctl name="ADC3 Volume" value="8" />
+ <ctl name="ADC4 Volume" value="8" />
+ <ctl name="SLIM RX2 MUX" value="AIF4_PB" />
+ <ctl name="SLIM RX3 MUX" value="AIF4_PB" />
+ <ctl name="SLIM_6_RX Channels" value="Two" />
+ <ctl name="RX INT1_1 MIX1 INP0" value="RX2" />
+ <ctl name="RX INT2_1 MIX1 INP0" value="RX3" />
+ <ctl name="RX HPH Mode" value="CLS_H_LP" />
+ <ctl name="IIR0 Enable Band1" value="1" />
+ <ctl name="IIR0 Enable Band2" value="1" />
+ <ctl name="IIR0 Enable Band3" value="1" />
+ <ctl name="IIR0 Enable Band4" value="1" />
+ <ctl name="IIR0 Enable Band5" value="1" />
+ <ctl name="IIR0 INP0 Volume" value="54" />
+ <ctl name="RX INT1 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX INT2 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX1 Digital Volume" value="81" />
+ <ctl name="RX2 Digital Volume" value="81" />
+ <ctl name="ANC HPHL Enable Switch" value="1" />
+ <ctl name="ANC HPHR Enable Switch" value="1" />
+ <ctl name="HPHL Volume" value="20" />
+ <ctl name="HPHR Volume" value="20" />
+ </path>
+
+ <path name="voice-anc-fb-headphones">
+ <ctl name="COMP1 Switch" value="0" />
+ <ctl name="COMP2 Switch" value="0" />
+ <ctl name="ANC Function" value="ON" />
+ <ctl name="ANC Slot" value="1" />
+ <ctl name="ADC MUX10" value="AMIC" />
+ <ctl name="AMIC MUX10" value="ADC3" />
+ <ctl name="ADC MUX12" value="AMIC" />
+ <ctl name="AMIC MUX12" value="ADC4" />
+ <ctl name="ANC0 FB MUX" value="ANC_IN_HPHL" />
+ <ctl name="ANC1 FB MUX" value="ANC_IN_HPHR" />
+ <ctl name="ADC3 Volume" value="8" />
+ <ctl name="ADC4 Volume" value="8" />
+ <ctl name="SLIM RX2 MUX" value="AIF4_PB" />
+ <ctl name="SLIM RX3 MUX" value="AIF4_PB" />
+ <ctl name="SLIM_6_RX Channels" value="Two" />
+ <ctl name="RX INT1_1 MIX1 INP0" value="RX2" />
+ <ctl name="RX INT2_1 MIX1 INP0" value="RX3" />
+ <ctl name="RX HPH Mode" value="CLS_H_LP" />
+ <ctl name="IIR0 Enable Band1" value="1" />
+ <ctl name="IIR0 Enable Band2" value="1" />
+ <ctl name="IIR0 Enable Band3" value="1" />
+ <ctl name="IIR0 Enable Band4" value="1" />
+ <ctl name="IIR0 Enable Band5" value="1" />
+ <ctl name="IIR0 INP0 Volume" value="62" />
+ <ctl name="RX INT1 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX INT2 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX1 Digital Volume" value="81" />
+ <ctl name="RX2 Digital Volume" value="81" />
+ <ctl name="ANC HPHL Enable Switch" value="1" />
+ <ctl name="ANC HPHR Enable Switch" value="1" />
+ <ctl name="HPHL Volume" value="14" />
+ <ctl name="HPHR Volume" value="14" />
+ </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="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="DMIC2" />
+ <ctl name="SLIM TX8 MUX" value="DEC8" />
+ <ctl name="ADC MUX8" value="DMIC" />
+ <ctl name="DMIC MUX8" value="DMIC4" />
+ <ctl name="SLIM_0_TX Channels" value="Two" />
+ </path>
+
+ <path name="speaker-dmic-endfire">
+ <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="DMIC1" />
+ <ctl name="SLIM TX8 MUX" value="DEC8" />
+ <ctl name="ADC MUX8" value="DMIC" />
+ <ctl name="DMIC MUX8" value="DMIC5" />
+ <ctl name="SLIM_0_TX Channels" value="Two" />
+ </path>
+
+ <path name="dmic-endfire">
+ <path name="handset-dmic-endfire" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <path name="dmic-endfire-liquid">
+ <path name="handset-dmic-endfire" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </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="AIF1_CAP Mixer SLIM TX7" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX8" value="1" />
+ <ctl name="SLIM_0_TX Channels" value="Two" />
+ <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="DMIC2" />
+ </path>
+
+ <path name="dmic-broadside">
+ <path name="speaker-dmic-broadside" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <path name="voice-speaker-dmic-broadside">
+ <path name="dmic-broadside" />
+ </path>
+
+ <!-- Quad MIC devices -->
+ <path name="speaker-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="DMIC1" />
+ <ctl name="SLIM TX6 MUX" value="DEC6" />
+ <ctl name="ADC MUX6" value="DMIC" />
+ <ctl name="DMIC MUX6" value="DMIC0" />
+ <ctl name="SLIM TX7 MUX" value="DEC7" />
+ <ctl name="ADC MUX7" value="DMIC" />
+ <ctl name="DMIC MUX7" value="DMIC2" />
+ <ctl name="SLIM TX8 MUX" value="DEC8" />
+ <ctl name="ADC MUX8" value="DMIC" />
+ <ctl name="DMIC MUX8" value="DMIC5" />
+ </path>
+
+ <path name="speaker-qmic-liquid">
+ <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="DMIC3" />
+ <ctl name="SLIM TX6 MUX" value="DEC6" />
+ <ctl name="ADC MUX6" value="DMIC" />
+ <ctl name="DMIC MUX6" value="DMIC1" />
+ <ctl name="SLIM TX7 MUX" value="DEC7" />
+ <ctl name="ADC MUX7" value="DMIC" />
+ <ctl name="DMIC MUX7" value="DMIC4" />
+ <ctl name="SLIM TX8 MUX" value="DEC8" />
+ <ctl name="ADC MUX8" value="AMIC" />
+ <ctl name="AMIC MUX8" value="ADC1" />
+ </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="SLIM RX2 MUX" value="AIF4_PB" />
+ <ctl name="SLIM_6_RX Channels" value="One" />
+ <ctl name="RX INT1_1 MIX1 INP0" value="RX2" />
+ <ctl name="RX INT1 DEM MUX" value="CLSH_DSM_OUT" />
+ </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" />
+ <ctl name="ADC2 Volume" value="12" />
+ </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="dmic1" />
+ </path>
+
+ <path name="listen-handset-mic">
+ <ctl name="MADONOFF Switch" value="1" />
+ <ctl name="MAD Input" value="DMIC2" />
+ </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="SLIMBUS_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/msmpeafowl/mixer_paths_tavil.xml b/configs/msmpeafowl/mixer_paths_tavil.xml
new file mode 100644
index 0000000..03b10f1
--- /dev/null
+++ b/configs/msmpeafowl/mixer_paths_tavil.xml
@@ -0,0 +1,2389 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!-- Copyright (c) 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, -->
+<!-- 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="Voice Sidetone Enable" value="0" />
+ <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="SLIMBUS_0_RX Port Mixer SLIM_0_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="SLIMBUS_6_RX Port Mixer SLIM_0_TX" value="0" />
+ <ctl name="SLIMBUS_4_RX Audio Mixer MultiMedia1" value="0" />
+ <ctl name="SLIMBUS_4_RX Audio Mixer MultiMedia2" value="0" />
+ <ctl name="MultiMedia5 Mixer SLIM_0_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 SLIM_0_TX" value="0" />
+ <ctl name="MultiMedia1 Mixer SLIM_4_TX" value="0" />
+ <ctl name="MultiMedia1 Mixer SLIM_7_TX" value="0" />
+ <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="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="SLIMBUS_0_RX Audio Mixer MultiMedia1" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia1" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia2" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia2" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia3" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia3" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="SLIMBUS_2_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia5" value="0" />
+ <ctl name="SLIMBUS_2_RX Audio Mixer MultiMedia5" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia5" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia7" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia7" value="0" />
+ <ctl name="SLIMBUS_2_RX Audio Mixer MultiMedia7" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia7" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia8" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia8" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia8" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia10" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia10" value="0" />
+ <ctl name="SLIMBUS_2_RX Audio Mixer MultiMedia10" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia10" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia11" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia11" value="0" />
+ <ctl name="SLIMBUS_2_RX Audio Mixer MultiMedia11" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia11" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia12" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia12" value="0" />
+ <ctl name="SLIMBUS_2_RX Audio Mixer MultiMedia12" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia12" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia13" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia13" value="0" />
+ <ctl name="SLIMBUS_2_RX Audio Mixer MultiMedia13" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia13" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia14" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia14" value="0" />
+ <ctl name="SLIMBUS_2_RX Audio Mixer MultiMedia14" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia14" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia15" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia15" value="0" />
+ <ctl name="SLIMBUS_2_RX Audio Mixer MultiMedia15" value="0" />
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia15" value="0" />
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia16" value="0" />
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia16" value="0" />
+ <ctl name="SLIMBUS_2_RX Audio Mixer MultiMedia16" value="0" />
+ <ctl name="SLIMBUS_6_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="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 SLIM_0_TX" value="0" />
+ <ctl name="SLIM_2_RX Format" value="UNPACKED" />
+ <ctl name="SLIM_2_RX SampleRate" value="KHZ_48" />
+ <ctl name="SLIM_5_RX SampleRate" value="KHZ_44P1" />
+ <ctl name="SLIM_0_RX Channels" value="One" />
+ <ctl name="SLIM_5_RX Channels" value="One" />
+ <ctl name="SLIM_6_RX Channels" value="One" />
+ <ctl name="SLIM_2_RX Channels" value="One" />
+ <ctl name="SLIM_0_TX Channels" value="One" />
+ <ctl name="SLIM_1_TX Channels" value="One" />
+ <ctl name="AIF1_CAP Mixer SLIM TX9" value="0"/>
+ <ctl name="AIF1_CAP Mixer SLIM TX8" value="0"/>
+ <ctl name="AIF1_CAP Mixer SLIM TX7" value="0" />
+ <ctl name="AIF1_CAP Mixer SLIM TX6" value="0" />
+ <ctl name="AIF1_CAP Mixer SLIM TX5" value="0"/>
+ <ctl name="AIF1_CAP Mixer SLIM TX4" value="0" />
+ <ctl name="AIF1_CAP Mixer SLIM TX3" value="0"/>
+ <ctl name="AIF1_CAP Mixer SLIM TX2" value="0" />
+ <ctl name="AIF1_CAP Mixer SLIM TX1" value="0"/>
+ <ctl name="AIF1_CAP Mixer SLIM TX0" value="0"/>
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="SLIM0_RX_VI_FB_LCH_MUX" value="ZERO" />
+ <ctl name="SLIM0_RX_VI_FB_RCH_MUX" value="ZERO" />
+ <ctl name="VI_FEED_TX Channels" value="Two" />
+ <ctl name="AIF4_VI Mixer SPKR_VI_1" value="0" />
+ <ctl name="AIF4_VI Mixer SPKR_VI_2" value="0" />
+ <ctl name="SLIM_4_TX Format" value="UNPACKED" />
+ <ctl name="AANC_SLIM_0_RX MUX" value="ZERO" />
+ <!-- HFP start -->
+ <ctl name="HFP_SLIM7_UL_HL Switch" value="0" />
+ <ctl name="SLIMBUS_0_RX Port Mixer SLIM_7_TX" value="0" />
+ <ctl name="SLIMBUS_6_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="SLIMBUS_0_RX Port Mixer SLIM_8_TX" value="0" />
+ <ctl name="SLIMBUS_DL_HL Switch" value="0" />
+ <ctl name="SLIMBUS_6_RX Port Mixer SLIM_8_TX" value="0" />
+ <ctl name="SLIMBUS6_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="SLIM_0_RX_Voice Mixer VoiceMMode1" value="0" />
+ <ctl name="SLIM_6_RX_Voice Mixer VoiceMMode1" value="0" />
+ <ctl name="VoiceMMode1_Tx Mixer SLIM_0_TX_MMode1" 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="SLIM_0_RX_Voice Mixer VoiceMMode2" value="0" />
+ <ctl name="SLIM_6_RX_Voice Mixer VoiceMMode2" value="0" />
+ <ctl name="VoiceMMode2_Tx Mixer SLIM_0_TX_MMode2" 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" />
+ <ctl name="AIF3_CAP Mixer SLIM TX1" value="0" />
+ <ctl name="AIF3_CAP Mixer SLIM TX2" value="0" />
+ <!-- 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="SLIM_0_RX_Voice Mixer Voip" value="0" />
+ <ctl name="SLIM_6_RX_Voice Mixer Voip" value="0" />
+ <ctl name="Voip_Tx Mixer SLIM_0_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 SLIM_0_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="SLIMBUS_DL_HL Switch" value="0" />
+ <ctl name="SLIMBUS6_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" />
+
+ <!-- Volume controls -->
+ <ctl name="LINEOUT1 Volume" value="13" />
+ <ctl name="LINEOUT2 Volume" value="13" />
+ <ctl name="HPHL Volume" value="20" />
+ <ctl name="HPHR Volume" value="20" />
+ <ctl name="EAR PA Gain" value="G_6_DB" />
+ <ctl name="EAR SPKR PA Gain" value="G_DEFAULT" />
+
+ <ctl name="RX0 Digital Volume" value="84" />
+ <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="RX6 Digital Volume" value="84" />
+ <ctl name="RX7 Digital Volume" value="84" />
+ <ctl name="ADC1 Volume" value="12" />
+ <ctl name="ADC2 Volume" value="12" />
+ <ctl name="ADC3 Volume" value="0" />
+ <ctl name="ADC4 Volume" value="0" />
+ <ctl name="DEC0 Volume" value="84" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="DEC2 Volume" value="84" />
+ <ctl name="DEC3 Volume" value="84" />
+ <ctl name="DEC4 Volume" value="84" />
+ <ctl name="DEC5 Volume" value="84" />
+ <ctl name="DEC6 Volume" value="84" />
+ <ctl name="DEC7 Volume" value="84" />
+ <ctl name="DEC8 Volume" value="84" />
+
+ <!-- Compander controls -->
+ <ctl name="COMP1 Switch" value="1" />
+ <ctl name="COMP2 Switch" value="1" />
+ <ctl name="COMP7 Switch" value="0" />
+ <ctl name="COMP8 Switch" value="0" />
+
+ <!-- ADC, DMIC and AMIC controls -->
+ <ctl name="ADC MUX0" value="AMIC" />
+ <ctl name="ADC MUX1" value="AMIC" />
+ <ctl name="ADC MUX2" value="AMIC" />
+ <ctl name="ADC MUX3" value="AMIC" />
+ <ctl name="ADC MUX4" value="AMIC" />
+ <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="ADC MUX10" value="AMIC" />
+ <ctl name="ADC MUX11" value="AMIC" />
+ <ctl name="ADC MUX12" value="AMIC" />
+ <ctl name="ADC MUX13" value="AMIC" />
+ <ctl name="DMIC MUX0" value="ZERO" />
+ <ctl name="DMIC MUX1" value="ZERO" />
+ <ctl name="DMIC MUX2" value="ZERO" />
+ <ctl name="DMIC MUX3" value="ZERO" />
+ <ctl name="DMIC MUX4" value="ZERO" />
+ <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="DMIC MUX10" value="ZERO" />
+ <ctl name="DMIC MUX11" value="ZERO" />
+ <ctl name="DMIC MUX12" value="ZERO" />
+ <ctl name="DMIC MUX13" value="ZERO" />
+ <ctl name="AMIC MUX0" value="ZERO" />
+ <ctl name="AMIC MUX1" value="ZERO" />
+ <ctl name="AMIC MUX2" value="ZERO" />
+ <ctl name="AMIC MUX3" value="ZERO" />
+ <ctl name="AMIC MUX4" value="ZERO" />
+ <ctl name="AMIC MUX5" value="ZERO" />
+ <ctl name="AMIC MUX6" value="ZERO" />
+ <ctl name="AMIC MUX7" value="ZERO" />
+ <ctl name="AMIC MUX8" value="ZERO" />
+ <ctl name="AMIC MUX10" value="ZERO" />
+ <ctl name="AMIC MUX11" value="ZERO" />
+ <ctl name="AMIC MUX12" value="ZERO" />
+ <ctl name="AMIC MUX13" value="ZERO" />
+
+ <ctl name="AMIC4_5 SEL" value="AMIC4" />
+ <!-- CDC_IF and SLIM controls -->
+ <ctl name="SLIM RX0 MUX" value="ZERO" />
+ <ctl name="SLIM RX1 MUX" value="ZERO" />
+ <ctl name="SLIM RX2 MUX" value="ZERO" />
+ <ctl name="SLIM RX3 MUX" value="ZERO" />
+ <ctl name="SLIM RX4 MUX" value="ZERO" />
+ <ctl name="SLIM RX5 MUX" value="ZERO" />
+ <ctl name="SLIM RX6 MUX" value="ZERO" />
+ <ctl name="SLIM RX7 MUX" value="ZERO" />
+ <ctl name="CDC_IF RX0 MUX" value="SLIM RX0" />
+ <ctl name="CDC_IF RX1 MUX" value="SLIM RX1" />
+ <ctl name="CDC_IF RX2 MUX" value="SLIM RX2" />
+ <ctl name="CDC_IF RX3 MUX" value="SLIM RX3" />
+ <ctl name="CDC_IF RX4 MUX" value="SLIM RX4" />
+ <ctl name="CDC_IF RX5 MUX" value="SLIM RX5" />
+ <ctl name="CDC_IF RX6 MUX" value="SLIM RX6" />
+ <ctl name="CDC_IF RX7 MUX" value="SLIM RX7" />
+ <ctl name="CDC_IF TX0 MUX" value="ZERO" />
+ <ctl name="CDC_IF TX1 MUX" value="ZERO" />
+ <ctl name="CDC_IF TX2 MUX" value="ZERO" />
+ <ctl name="CDC_IF TX3 MUX" value="ZERO" />
+ <ctl name="CDC_IF TX4 MUX" value="ZERO" />
+ <ctl name="CDC_IF TX5 MUX" value="ZERO" />
+ <ctl name="CDC_IF TX6 MUX" value="ZERO" />
+ <ctl name="CDC_IF TX7 MUX" value="ZERO" />
+ <ctl name="CDC_IF TX8 MUX" value="ZERO" />
+ <ctl name="CDC_IF TX9 MUX" value="ZERO" />
+ <ctl name="CDC_IF TX10 MUX" value="ZERO" />
+ <ctl name="CDC_IF TX13 MUX" value="ZERO" />
+
+ <!-- Interpolator chain controls -->
+ <ctl name="RX INT0_1 MIX1 INP0" value="ZERO" />
+ <ctl name="RX INT0_1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX INT0_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT1_1 MIX1 INP0" value="ZERO" />
+ <ctl name="RX INT1_1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX INT1_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT2_1 MIX1 INP0" value="ZERO" />
+ <ctl name="RX INT2_1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX INT2_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT7_1 MIX1 INP0" value="ZERO" />
+ <ctl name="RX INT7_1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX INT7_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT8_1 MIX1 INP0" value="ZERO" />
+ <ctl name="RX INT8_1 MIX1 INP1" value="ZERO" />
+ <ctl name="RX INT8_1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX INT0_2 MUX" value="ZERO" />
+ <ctl name="RX INT1_2 MUX" value="ZERO" />
+ <ctl name="RX INT2_2 MUX" value="ZERO" />
+ <ctl name="RX INT7_2 MUX" value="ZERO" />
+ <ctl name="RX INT8_2 MUX" value="ZERO" />
+ <ctl name="RX INT1_1 NATIVE MUX" value="OFF" />
+ <ctl name="RX INT2_1 NATIVE MUX" value="OFF" />
+ <ctl name="RX INT1_2 NATIVE MUX" value="OFF" />
+ <ctl name="RX INT2_2 NATIVE MUX" value="OFF" />
+ <ctl name="ASRC0 MUX" value="ZERO" />
+ <ctl name="ASRC1 MUX" value="ZERO" />
+ <ctl name="RX INT1 SEC MIX HPHL Switch" value="0" />
+ <ctl name="RX INT2 SEC MIX HPHR Switch" value="0" />
+ <ctl name="DSD_L IF MUX" value="ZERO" />
+ <ctl name="DSD_R IF MUX" value="ZERO" />
+ <ctl name="RX INT1 MIX3 DSD HPHL Switch" value="0" />
+ <ctl name="RX INT2 MIX3 DSD HPHR Switch" value="0" />
+ <ctl name="RX INT0 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX INT1 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX INT2 DEM MUX" value="CLSH_DSM_OUT" />
+
+ <!-- Headphone Default mode - uLP -->
+ <ctl name="RX HPH Mode" value="CLS_H_ULP" />
+ <ctl name="ASRC0 Output Mode" value="INT" />
+ <ctl name="ASRC1 Output Mode" value="INT" />
+
+ <!-- IIR/voice anc -->
+ <ctl name="IIR0 Band1" id ="0" value="268435456" />
+ <ctl name="IIR0 Band1" id ="1" value="0" />
+ <ctl name="IIR0 Band1" id ="2" value="0" />
+ <ctl name="IIR0 Band1" id ="3" value="0" />
+ <ctl name="IIR0 Band1" id ="4" value="0" />
+ <ctl name="IIR0 Band2" id ="0" value="268435456" />
+ <ctl name="IIR0 Band2" id ="1" value="0" />
+ <ctl name="IIR0 Band2" id ="2" value="0" />
+ <ctl name="IIR0 Band2" id ="3" value="0" />
+ <ctl name="IIR0 Band2" id ="4" value="0" />
+ <ctl name="IIR0 Band3" id ="0" value="268435456" />
+ <ctl name="IIR0 Band3" id ="1" value="0" />
+ <ctl name="IIR0 Band3" id ="2" value="0" />
+ <ctl name="IIR0 Band3" id ="3" value="0" />
+ <ctl name="IIR0 Band3" id ="4" value="268435456" />
+ <ctl name="IIR0 Band4" id ="0" value="0" />
+ <ctl name="IIR0 Band4" id ="1" value="0" />
+ <ctl name="IIR0 Band4" id ="2" value="0" />
+ <ctl name="IIR0 Band4" id ="3" value="0" />
+ <ctl name="IIR0 Band4" id ="4" value="0" />
+ <ctl name="IIR0 Band5" id ="0" value="268435456" />
+ <ctl name="IIR0 Band5" id ="1" value="0" />
+ <ctl name="IIR0 Band5" id ="2" value="0" />
+ <ctl name="IIR0 Band5" id ="3" value="0" />
+ <ctl name="IIR0 Band5" id ="4" value="0" />
+ <ctl name="IIR0 Enable Band1" value="0" />
+ <ctl name="IIR0 Enable Band2" value="0" />
+ <ctl name="IIR0 Enable Band3" value="0" />
+ <ctl name="IIR0 Enable Band4" value="0" />
+ <ctl name="IIR0 Enable Band5" value="0" />
+ <ctl name="IIR0 INP0 Volume" value="54" />
+ <ctl name="IIR0 INP0 MUX" value="ZERO" />
+ <ctl name="IIR0 INP1 MUX" value="ZERO" />
+ <ctl name="IIR0 INP2 MUX" value="ZERO" />
+ <ctl name="IIR1 INP0 MUX" value="ZERO" />
+ <ctl name="IIR1 INP1 MUX" value="ZERO" />
+ <ctl name="IIR1 INP2 MUX" value="ZERO" />
+
+ <!-- anc related -->
+ <ctl name="ANC Slot" value="0" />
+ <ctl name="ANC Function" value="OFF" />
+ <ctl name="ANC0 FB MUX" value="ZERO" />
+ <ctl name="ANC1 FB MUX" value="ZERO" />
+ <ctl name="ANC OUT EAR Enable Switch" value="0" />
+ <ctl name="ANC OUT EAR SPKR Enable Switch" value="0" />
+ <ctl name="ANC SPKR PA Enable Switch" value="0" />
+ <ctl name="ANC OUT HPHL Enable Switch" value="0" />
+ <ctl name="ANC OUT HPHR Enable Switch" value="0" />
+
+ <!-- Codec controls end -->
+
+ <!-- These are audio route (FE to BE) specific mixer settings -->
+ <path name="echo-reference">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_RX" />
+ </path>
+
+ <path name="echo-reference headphones">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_6_RX" />
+ </path>
+
+ <path name="echo-reference headphones-44.1">
+ </path>
+
+ <path name="deep-buffer-playback">
+ <ctl name="SLIMBUS_0_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 display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia1" value="1" />
+ </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="SLIMBUS_6_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="SLIMBUS_0_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 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-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="SLIMBUS_6_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="SLIMBUS_0_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="SLIMBUS_6_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 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-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 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="SLIMBUS_0_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 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-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="SLIMBUS_6_RX Audio Mixer MultiMedia4" value="1" />
+ </path>
+
+ <path name="compress-offload-playback headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia4" value="1" />
+ </path>
+
+ <path name="compress-offload-playback headphones-dsd">
+ <ctl name="SLIMBUS_2_RX Audio Mixer MultiMedia4" value="1" />
+ </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="SLIMBUS_0_RX Audio 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-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="SLIMBUS_6_RX Audio Mixer MultiMedia7" value="1" />
+ </path>
+
+ <path name="compress-offload-playback2 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia7" value="1" />
+ </path>
+
+ <path name="compress-offload-playback2 headphones-dsd">
+ <ctl name="SLIMBUS_2_RX Audio Mixer MultiMedia7" value="1" />
+ </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="SLIMBUS_0_RX Audio 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-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="SLIMBUS_6_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="compress-offload-playback3 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="compress-offload-playback3 headphones-dsd">
+ <ctl name="SLIMBUS_2_RX Audio Mixer MultiMedia10" value="1" />
+ </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="SLIMBUS_0_RX Audio 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-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="SLIMBUS_6_RX Audio Mixer MultiMedia11" value="1" />
+ </path>
+
+ <path name="compress-offload-playback4 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia11" value="1" />
+ </path>
+
+ <path name="compress-offload-playback4 headphones-dsd">
+ <ctl name="SLIMBUS_2_RX Audio Mixer MultiMedia11" value="1" />
+ </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="SLIMBUS_0_RX Audio 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-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="SLIMBUS_6_RX Audio Mixer MultiMedia12" value="1" />
+ </path>
+
+ <path name="compress-offload-playback5 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia12" value="1" />
+ </path>
+
+ <path name="compress-offload-playback5 headphones-dsd">
+ <ctl name="SLIMBUS_2_RX Audio Mixer MultiMedia12" value="1" />
+ </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="SLIMBUS_0_RX Audio 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-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="SLIMBUS_6_RX Audio Mixer MultiMedia13" value="1" />
+ </path>
+
+ <path name="compress-offload-playback6 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia13" value="1" />
+ </path>
+
+ <path name="compress-offload-playback6 headphones-dsd">
+ <ctl name="SLIMBUS_2_RX Audio Mixer MultiMedia13" value="1" />
+ </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="SLIMBUS_0_RX Audio 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-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="SLIMBUS_6_RX Audio Mixer MultiMedia14" value="1" />
+ </path>
+
+ <path name="compress-offload-playback7 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia14" value="1" />
+ </path>
+
+ <path name="compress-offload-playback7 headphones-dsd">
+ <ctl name="SLIMBUS_2_RX Audio Mixer MultiMedia14" value="1" />
+ </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="SLIMBUS_0_RX Audio 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-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="SLIMBUS_6_RX Audio Mixer MultiMedia15" value="1" />
+ </path>
+
+ <path name="compress-offload-playback8 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia15" value="1" />
+ </path>
+
+ <path name="compress-offload-playback8 headphones-dsd">
+ <ctl name="SLIMBUS_2_RX Audio Mixer MultiMedia15" value="1" />
+ </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="SLIMBUS_0_RX Audio 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-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="SLIMBUS_6_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="compress-offload-playback9 headphones-44.1">
+ <ctl name="SLIMBUS_5_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="compress-offload-playback9 headphones-dsd">
+ <ctl name="SLIMBUS_2_RX Audio Mixer MultiMedia16" value="1" />
+ </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 SLIM_0_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 SLIM_0_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 SLIM_0_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="SLIMBUS_0_RX Port Mixer SLIM_8_TX" value="1" />
+ <ctl name="SLIMBUS_DL_HL Switch" value="1" />
+ </path>
+
+ <path name="play-fm headphones">
+ <ctl name="SLIMBUS_8 LOOPBACK Volume" value="1" />
+ <ctl name="SLIMBUS_6_RX Port Mixer SLIM_8_TX" value="1" />
+ <ctl name="SLIMBUS6_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="SLIMBUS_0_RX Port Mixer SLIM_7_TX" value="1" />
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia6" value="1" />
+ <ctl name="MultiMedia6 Mixer SLIM_0_TX" value="1" />
+ <ctl name="SLIMBUS_DL_HL Switch" value="1" />
+ </path>
+
+ <path name="hfp-sco headphones">
+ <ctl name="HFP_SLIM7_UL_HL Switch" value="1" />
+ <ctl name="SLIMBUS_6_RX Port Mixer SLIM_7_TX" value="1" />
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia6" value="1" />
+ <ctl name="MultiMedia6 Mixer SLIM_0_TX" value="1" />
+ <ctl name="SLIMBUS6_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="SLIM_0_RX_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer SLIM_0_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 SLIM_0_TX_Voip" value="1" />
+ </path>
+
+ <path name="compress-voip-call headphones">
+ <ctl name="SLIM_6_RX_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer SLIM_0_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 SLIM_0_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="voicemmode1-call">
+ <ctl name="SLIM_0_RX_Voice Mixer VoiceMMode1" value="1" />
+ <ctl name="VoiceMMode1_Tx Mixer SLIM_0_TX_MMode1" value="1" />
+ </path>
+
+ <path name="voicemmode1-call headphones">
+ <ctl name="SLIM_6_RX_Voice Mixer VoiceMMode1" value="1" />
+ <ctl name="VoiceMMode1_Tx Mixer SLIM_0_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 SLIM_0_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="voicemmode2-call">
+ <ctl name="SLIM_0_RX_Voice Mixer VoiceMMode2" value="1" />
+ <ctl name="VoiceMMode2_Tx Mixer SLIM_0_TX_MMode2" value="1" />
+ </path>
+
+ <path name="voicemmode2-call headphones">
+ <ctl name="SLIM_6_RX_Voice Mixer VoiceMMode2" value="1" />
+ <ctl name="VoiceMMode2_Tx Mixer SLIM_0_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 SLIM_0_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="spkr-rx-calib">
+ <ctl name="SLIMBUS_DL_HL Switch" value="1" />
+ </path>
+
+ <path name="spkr-vi-record">
+ </path>
+
+ <!-- These are actual sound device specific mixer settings -->
+ <path name="amic1">
+ <ctl name="AIF1_CAP Mixer SLIM TX6" value="1"/>
+ <ctl name="SLIM_0_TX Channels" value="One" />
+ <ctl name="CDC_IF TX6 MUX" value="DEC6" />
+ <ctl name="ADC MUX6" value="AMIC" />
+ <ctl name="AMIC MUX6" value="ADC1" />
+ <ctl name="IIR0 INP0 MUX" value="DEC6" />
+ </path>
+
+ <path name="amic2">
+ <ctl name="AIF1_CAP Mixer SLIM TX0" value="1"/>
+ <ctl name="SLIM_0_TX Channels" value="One" />
+ <ctl name="CDC_IF TX0 MUX" value="DEC0" />
+ <ctl name="ADC MUX0" value="AMIC" />
+ <ctl name="AMIC MUX0" value="ADC2" />
+ <ctl name="IIR0 INP0 MUX" value="DEC0" />
+ </path>
+
+ <!-- For Tavil, DMIC numbered from 0 to 5 -->
+ <path name="dmic1">
+ <ctl name="AIF1_CAP Mixer SLIM TX7" value="1" />
+ <ctl name="CDC_IF TX7 MUX" value="DEC7" />
+ <ctl name="SLIM_0_TX Channels" value="One" />
+ <ctl name="ADC MUX7" value="DMIC" />
+ <ctl name="DMIC MUX7" value="DMIC0" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <path name="dmic2">
+ <ctl name="AIF1_CAP Mixer SLIM TX7" value="1"/>
+ <ctl name="CDC_IF TX7 MUX" value="DEC7" />
+ <ctl name="SLIM_0_TX Channels" value="One" />
+ <ctl name="ADC MUX7" value="DMIC" />
+ <ctl name="DMIC MUX7" value="DMIC1" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <path name="dmic3">
+ <ctl name="AIF1_CAP Mixer SLIM TX7" value="1" />
+ <ctl name="CDC_IF TX7 MUX" value="DEC7" />
+ <ctl name="SLIM_0_TX Channels" value="One" />
+ <ctl name="ADC MUX7" value="DMIC" />
+ <ctl name="DMIC MUX7" value="DMIC2" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <path name="dmic4">
+ <ctl name="AIF1_CAP Mixer SLIM TX7" value="1" />
+ <ctl name="CDC_IF TX7 MUX" value="DEC7" />
+ <ctl name="SLIM_0_TX Channels" value="One" />
+ <ctl name="ADC MUX7" value="DMIC" />
+ <ctl name="DMIC MUX7" value="DMIC3" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <path name="dmic5">
+ <ctl name="AIF1_CAP Mixer SLIM TX7" value="1" />
+ <ctl name="CDC_IF TX7 MUX" value="DEC7" />
+ <ctl name="SLIM_0_TX Channels" value="One" />
+ <ctl name="ADC MUX7" value="DMIC" />
+ <ctl name="DMIC MUX7" value="DMIC4" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <path name="dmic6">
+ <ctl name="AIF1_CAP Mixer SLIM TX7" value="1" />
+ <ctl name="CDC_IF TX7 MUX" value="DEC7" />
+ <ctl name="SLIM_0_TX Channels" value="One" />
+ <ctl name="ADC MUX7" value="DMIC" />
+ <ctl name="DMIC MUX7" value="DMIC5" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <path name="speaker">
+ <ctl name="SLIM RX0 MUX" value="AIF1_PB" />
+ <ctl name="CDC_IF RX0 MUX" value="SLIM RX0" />
+ <ctl name="SLIM RX1 MUX" value="AIF1_PB" />
+ <ctl name="CDC_IF RX1 MUX" value="SLIM RX1" />
+ <ctl name="SLIM_0_RX Channels" value="Two" />
+ <ctl name="RX INT7_1 MIX1 INP0" value="RX0" />
+ <ctl name="RX INT8_1 MIX1 INP0" value="RX1" />
+ <ctl name="COMP7 Switch" value="1" />
+ <ctl name="COMP8 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="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" />
+ </path>
+
+ <path name="speaker-mono">
+ <ctl name="SLIM RX0 MUX" value="AIF1_PB" />
+ <ctl name="CDC_IF RX0 MUX" value="SLIM RX0" />
+ <ctl name="SLIM_0_RX Channels" value="One" />
+ <ctl name="RX INT7_1 MIX1 INP0" value="RX0" />
+ <ctl name="COMP7 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" />
+ </path>
+
+ <path name="speaker-mono-2">
+ <ctl name="SLIM RX1 MUX" value="AIF1_PB" />
+ <ctl name="CDC_IF RX1 MUX" value="SLIM RX1" />
+ <ctl name="SLIM_0_RX Channels" value="One" />
+ <ctl name="RX INT8_1 MIX1 INP0" value="RX1" />
+ <ctl name="COMP8 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" />
+ </path>
+
+ <path name="speaker-qrd">
+ <path name="speaker-mono-2" />
+ </path>
+
+ <path name="speaker-fluid">
+ <path name="speaker-mono" />
+ </path>
+
+ <path name="speaker-liquid">
+ <path name="speaker" />
+ </path>
+
+ <path name="sidetone-iir">
+ <ctl name="IIR0 Enable Band1" value="1" />
+ <ctl name="IIR0 Enable Band2" value="1" />
+ <ctl name="IIR0 Enable Band3" value="1" />
+ <ctl name="IIR0 Enable Band4" value="1" />
+ <ctl name="IIR0 Enable Band5" value="1" />
+ </path>
+
+ <path name="sidetone-headphones">
+ <path name="sidetone-iir" />
+ <ctl name="IIR0 INP0 Volume" value="54" />
+ <ctl name="RX INT1 MIX2 INP" value="SRC0" />
+ <ctl name="RX INT2 MIX2 INP" value="SRC0" />
+ </path>
+
+ <path name="sidetone-handset">
+ <path name="sidetone-iir" />
+ <ctl name="IIR0 INP0 Volume" value="54" />
+ <ctl name="RX INT7 MIX2 INP" value="SRC0" />
+ </path>
+
+ <path name="afe-sidetone">
+ <ctl name="Voice Sidetone Enable" value="1" />
+ </path>
+
+ <path name="speaker-mic">
+ <path name="dmic2" />
+ </path>
+
+ <path name="speaker-mic-liquid">
+ <path name="dmic2" />
+ </path>
+
+ <path name="speaker-mic-sbc">
+ </path>
+
+ <path name="speaker-protected">
+ <ctl name="AIF4_VI Mixer SPKR_VI_1" value="1" />
+ <ctl name="AIF4_VI Mixer SPKR_VI_2" value="1" />
+ <ctl name="SLIM_4_TX Format" value="PACKED_16B" />
+ <path name="speaker" />
+ <ctl name="VI_FEED_TX Channels" value="Two" />
+ <ctl name="SLIM0_RX_VI_FB_LCH_MUX" value="SLIM4_TX" />
+ <ctl name="SLIM0_RX_VI_FB_RCH_MUX" value="SLIM4_TX" />
+ </path>
+
+ <path name="voice-speaker-protected">
+ <ctl name="AIF4_VI Mixer SPKR_VI_1" value="1" />
+ <ctl name="SLIM_4_TX Format" value="PACKED_16B" />
+ <path name="speaker-mono" />
+ <ctl name="VI_FEED_TX Channels" value="One" />
+ <ctl name="SLIM0_RX_VI_FB_LCH_MUX" value="SLIM4_TX" />
+ </path>
+
+ <path name="voice-speaker-2-protected">
+ <ctl name="AIF4_VI Mixer SPKR_VI_2" value="1" />
+ <ctl name="SLIM_4_TX Format" value="PACKED_16B" />
+ <path name="speaker-mono-2" />
+ <ctl name="VI_FEED_TX Channels" value="One" />
+ <ctl name="SLIM0_RX_VI_FB_LCH_MUX" value="SLIM4_TX" />
+ </path>
+
+ <path name="vi-feedback">
+ </path>
+
+ <path name="vi-feedback-mono-1">
+ </path>
+
+ <path name="vi-feedback-mono-2">
+ </path>
+
+ <path name="handset">
+ <ctl name="SLIM RX0 MUX" value="AIF1_PB" />
+ <ctl name="CDC_IF RX0 MUX" value="SLIM RX0" />
+ <ctl name="SLIM_0_RX Channels" value="One" />
+ <ctl name="RX INT7_1 MIX1 INP0" value="RX0" />
+ <ctl name="COMP7 Switch" value="1" />
+ <ctl name="SpkrLeft COMP Switch" value="1" />
+ <ctl name="SpkrLeft BOOST Switch" value="1" />
+ <ctl name="SpkrLeft SWR DAC_Port Switch" value="1" />
+ <ctl name="EAR SPKR PA Gain" value="G_6_DB" />
+ </path>
+
+ <path name="handset-mic">
+ <path name="dmic3" />
+ </path>
+
+ <path name="handset-mic-db">
+ </path>
+
+ <path name="handset-mic-cdp">
+ <path name="amic1" />
+ </path>
+
+ <path name="handset-mic-sbc">
+ </path>
+
+ <path name="three-mic">
+ <ctl name="AIF1_CAP Mixer SLIM TX5" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX6" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX8" value="1" />
+ <ctl name="SLIM_0_TX Channels" value="Three" />
+ <ctl name="CDC_IF TX5 MUX" value="DEC5" />
+ <ctl name="ADC MUX5" value="DMIC" />
+ <ctl name="DMIC MUX5" value="DMIC0" />
+ <ctl name="CDC_IF TX6 MUX" value="DEC6" />
+ <ctl name="ADC MUX6" value="DMIC" />
+ <ctl name="DMIC MUX6" value="DMIC2" />
+ <ctl name="CDC_IF TX8 MUX" value="DEC8" />
+ <ctl name="ADC MUX8" value="DMIC" />
+ <ctl name="DMIC MUX8" value="DMIC5" />
+ </path>
+
+ <path name="anc-handset">
+ <ctl name="ANC Function" value="ON" />
+ <ctl name="ANC Slot" value="6" />
+ <ctl name="SLIM RX0 MUX" value="AIF1_PB" />
+ <ctl name="CDC_IF RX0 MUX" value="SLIM RX0" />
+ <ctl name="SLIM_0_RX Channels" value="One" />
+ <ctl name="RX INT7_1 MIX1 INP0" value="RX0" />
+ <ctl name="SpkrLeft SWR DAC_Port Switch" value="1" />
+ <ctl name="ANC OUT EAR SPKR Enable Switch" value="1" />
+ <ctl name="ANC SPKR PA Enable Switch" value="1" />
+ <ctl name="SpkrLeft WSA PA Gain" value="G_6_DB" />
+ </path>
+
+ <path name="headphones">
+ <ctl name="SLIM RX2 MUX" value="AIF4_PB" />
+ <ctl name="SLIM RX3 MUX" value="AIF4_PB" />
+ <ctl name="SLIM_6_RX Channels" value="Two" />
+ <ctl name="RX INT1_2 MUX" value="RX2" />
+ <ctl name="RX INT2_2 MUX" value="RX3" />
+ </path>
+
+ <path name="headphones-44.1">
+ <ctl name="SLIM RX4 MUX" value="AIF3_PB" />
+ <ctl name="SLIM RX5 MUX" value="AIF3_PB" />
+ <ctl name="SLIM_5_RX Channels" value="Two" />
+ <ctl name="RX INT1_1 MIX1 INP0" value="RX4" />
+ <ctl name="RX INT2_1 MIX1 INP0" value="RX5" />
+ <ctl name="RX INT1_1 NATIVE MUX" value="ON" />
+ <ctl name="RX INT2_1 NATIVE MUX" value="ON" />
+ </path>
+
+ <path name="asrc-mode">
+ <ctl name="ASRC0 Output Mode" value="FRAC" />
+ <ctl name="ASRC1 Output Mode" value="FRAC" />
+ <ctl name="RX INT1_2 NATIVE MUX" value="ON" />
+ <ctl name="RX INT2_2 NATIVE MUX" value="ON" />
+ <ctl name="ASRC0 MUX" value="ASRC_IN_HPHL" />
+ <ctl name="RX INT1 SEC MIX HPHL Switch" value="1" />
+ <ctl name="ASRC1 MUX" value="ASRC_IN_HPHR" />
+ <ctl name="RX INT2 SEC MIX HPHR Switch" value="1" />
+ </path>
+
+ <path name="headphones-dsd">
+ <ctl name="SLIM RX6 MUX" value="AIF2_PB" />
+ <ctl name="SLIM RX7 MUX" value="AIF2_PB" />
+ <ctl name="SLIM_2_RX Channels" value="Two" />
+ <ctl name="DSD_L IF MUX" value="RX6" />
+ <ctl name="DSD_R IF MUX" value="RX7" />
+ <ctl name="RX INT1 MIX3 DSD HPHL Switch" value="1" />
+ <ctl name="RX INT2 MIX3 DSD HPHR Switch" value="1" />
+ <ctl name="SLIM_2_RX Format" value="DSD_DOP" />
+ <ctl name="RX HPH Mode" value="CLS_H_HIFI" />
+ </path>
+
+ <path name="hph-highquality-mode">
+ <ctl name="RX HPH Mode" value="CLS_H_LOHIFI" />
+ </path>
+
+ <path name="hph-lowpower-mode">
+ <ctl name="RX HPH Mode" value="CLS_H_ULP" />
+ </path>
+
+ <path name="true-native-mode">
+ </path>
+
+ <path name="line">
+ <path name="headphones" />
+ </path>
+
+ <path name="headset-mic">
+ <path name="amic2" />
+ </path>
+
+ <path name="headset-mic-liquid">
+ <path name="amic2" />
+ </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-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">
+ <ctl name="COMP1 Switch" value="0" />
+ <ctl name="COMP2 Switch" value="0" />
+ <ctl name="ANC Function" value="ON" />
+ <ctl name="ANC Slot" value="0" />
+ <ctl name="SLIM RX2 MUX" value="AIF4_PB" />
+ <ctl name="SLIM RX3 MUX" value="AIF4_PB" />
+ <ctl name="SLIM_6_RX Channels" value="Two" />
+ <ctl name="ADC MUX10" value="AMIC" />
+ <ctl name="AMIC MUX10" value="ADC3" />
+ <ctl name="ADC MUX12" value="AMIC" />
+ <ctl name="AMIC MUX12" value="ADC4" />
+ <ctl name="ANC0 FB MUX" value="ANC_IN_HPHL" />
+ <ctl name="ANC1 FB MUX" value="ANC_IN_HPHR" />
+ <ctl name="ADC3 Volume" value="8" />
+ <ctl name="ADC4 Volume" value="8" />
+ <ctl name="RX INT1_1 MIX1 INP0" value="RX2" />
+ <ctl name="RX INT2_1 MIX1 INP0" value="RX3" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ <ctl name="RX2 Digital Volume" value="84" />
+ <ctl name="ANC OUT HPHL Enable Switch" value="1" />
+ <ctl name="ANC OUT HPHR Enable Switch" value="1" />
+ </path>
+
+ <path name="speaker-and-anc-headphones">
+ <path name="anc-headphones" />
+ <path name="speaker" />
+ </path>
+
+ <path name="anc-fb-headphones">
+ <path name="anc-headphones" />
+ <ctl name="ANC Slot" value="1" />
+ </path>
+
+ <path name="speaker-and-anc-fb-headphones">
+ <path name="anc-fb-headphones" />
+ <path name="speaker" />
+ </path>
+
+ <path name="voice-anc-headphones">
+ <path name="anc-headphones" />
+ </path>
+
+ <path name="voice-anc-fb-headphones">
+ <path name="anc-fb-headphones" />
+ </path>
+
+ <path name="speaker-and-anc-headphones-liquid">
+ <path name="anc-headphones" />
+ </path>
+
+ <path name="display-port">
+ </path>
+
+ <path name="speaker-and-usb-headphones">
+ <path name="speaker" />
+ <path name="usb-headphones" />
+ </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="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">
+ <ctl name="ADC MUX10" value="DMIC" />
+ <ctl name="DMIC MUX10" value="DMIC4" />
+ <ctl name="ANC0 FB MUX" value="ANC_IN_EAR_SPKR" />
+ </path>
+
+ <path name="aanc-handset-mic">
+ <ctl name="AIF1_CAP Mixer SLIM TX6" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX8" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX9" value="1" />
+ <ctl name="SLIM_0_TX Channels" value="Three" />
+ <ctl name="AANC_SLIM_0_RX MUX" value="SLIMBUS_0_TX" />
+ <ctl name="CDC_IF TX6 MUX" value="DEC6" />
+ <ctl name="ADC MUX6" value="DMIC" />
+ <ctl name="DMIC MUX6" value="DMIC2" />
+ <ctl name="CDC_IF TX8 MUX" value="DEC8" />
+ <ctl name="ADC MUX8" value="DMIC" />
+ <ctl name="DMIC MUX8" value="DMIC4" />
+ <ctl name="CDC_IF TX9 MUX" value="DEC7" />
+ <ctl name="ADC MUX7" value="DMIC" />
+ <ctl name="DMIC MUX7" value="DMIC0" />
+ <ctl name="IIR0 INP0 MUX" value="DEC6" />
+ </path>
+ <path name="aanc-fluence-dmic-handset">
+ <path name="aanc-handset-mic" />
+ </path>
+
+ <!-- Dual MIC devices -->
+ <path name="handset-dmic-endfire">
+ <ctl name="AIF1_CAP Mixer SLIM TX7" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX8" value="1" />
+ <ctl name="CDC_IF TX7 MUX" value="DEC7" />
+ <ctl name="ADC MUX7" value="DMIC" />
+ <ctl name="DMIC MUX7" value="DMIC2" />
+ <ctl name="CDC_IF TX8 MUX" value="DEC8" />
+ <ctl name="ADC MUX8" value="DMIC" />
+ <ctl name="DMIC MUX8" value="DMIC4" />
+ <ctl name="SLIM_0_TX Channels" value="Two" />
+ </path>
+
+ <path name="speaker-dmic-endfire">
+ <ctl name="AIF1_CAP Mixer SLIM TX7" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX8" value="1" />
+ <ctl name="CDC_IF TX7 MUX" value="DEC7" />
+ <ctl name="ADC MUX7" value="DMIC" />
+ <ctl name="DMIC MUX7" value="DMIC1" />
+ <ctl name="CDC_IF TX8 MUX" value="DEC8" />
+ <ctl name="ADC MUX8" value="DMIC" />
+ <ctl name="DMIC MUX8" value="DMIC5" />
+ <ctl name="SLIM_0_TX Channels" value="Two" />
+ </path>
+
+ <path name="dmic-endfire">
+ <path name="handset-dmic-endfire" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <path name="dmic-endfire-liquid">
+ <path name="handset-dmic-endfire" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </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="AIF1_CAP Mixer SLIM TX7" value="1" />
+ <ctl name="AIF1_CAP Mixer SLIM TX8" value="1" />
+ <ctl name="SLIM_0_TX Channels" value="Two" />
+ <ctl name="CDC_IF TX7 MUX" value="DEC7" />
+ <ctl name="ADC MUX7" value="DMIC" />
+ <ctl name="DMIC MUX7" value="DMIC1" />
+ <ctl name="CDC_IF TX8 MUX" value="DEC8" />
+ <ctl name="ADC MUX8" value="DMIC" />
+ <ctl name="DMIC MUX8" value="DMIC2" />
+ </path>
+
+ <path name="dmic-broadside">
+ <path name="speaker-dmic-broadside" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </path>
+
+ <path name="voice-speaker-dmic-broadside">
+ <path name="dmic-broadside" />
+ </path>
+
+ <!-- Quad MIC devices -->
+ <path name="speaker-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="CDC_IF TX5 MUX" value="DEC5" />
+ <ctl name="ADC MUX5" value="DMIC" />
+ <ctl name="DMIC MUX5" value="DMIC1" />
+ <ctl name="CDC_IF TX6 MUX" value="DEC6" />
+ <ctl name="ADC MUX6" value="DMIC" />
+ <ctl name="DMIC MUX6" value="DMIC0" />
+ <ctl name="CDC_IF TX7 MUX" value="DEC7" />
+ <ctl name="ADC MUX7" value="DMIC" />
+ <ctl name="DMIC MUX7" value="DMIC2" />
+ <ctl name="CDC_IF TX8 MUX" value="DEC8" />
+ <ctl name="ADC MUX8" value="DMIC" />
+ <ctl name="DMIC MUX8" value="DMIC5" />
+ </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="SLIM RX2 MUX" value="AIF4_PB" />
+ <ctl name="SLIM_6_RX Channels" value="One" />
+ <ctl name="RX INT1_2 MUX" value="RX2" />
+ </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="amic2" />
+ <ctl name="ADC2 Volume" value="0" />
+ </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="dmic1" />
+ </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="SLIMBUS_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/msmpeafowl/msmpeafowl.mk b/configs/msmpeafowl/msmpeafowl.mk
new file mode 100644
index 0000000..389d7ca
--- /dev/null
+++ b/configs/msmpeafowl/msmpeafowl.mk
@@ -0,0 +1,241 @@
+#BOARD_USES_GENERIC_AUDIO := true
+#
+#AUDIO_FEATURE_FLAGS
+BOARD_USES_ALSA_AUDIO := true
+
+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_EXTN_FORMATS := true
+AUDIO_FEATURE_ENABLED_EXTN_FLAC_DECODER := true
+AUDIO_FEATURE_ENABLED_EXTN_RESAMPLER := true
+AUDIO_FEATURE_ENABLED_FM_POWER_OPT := true
+AUDIO_FEATURE_ENABLED_HDMI_SPK := true
+AUDIO_FEATURE_ENABLED_PCM_OFFLOAD := true
+AUDIO_FEATURE_ENABLED_PCM_OFFLOAD_24 := true
+AUDIO_FEATURE_ENABLED_FLAC_OFFLOAD := true
+AUDIO_FEATURE_ENABLED_VORBIS_OFFLOAD := true
+AUDIO_FEATURE_ENABLED_WMA_OFFLOAD := true
+AUDIO_FEATURE_ENABLED_ALAC_OFFLOAD := true
+AUDIO_FEATURE_ENABLED_APE_OFFLOAD := true
+AUDIO_FEATURE_ENABLED_AAC_ADTS_OFFLOAD := true
+AUDIO_FEATURE_ENABLED_PROXY_DEVICE := true
+AUDIO_FEATURE_ENABLED_SSR := true
+AUDIO_FEATURE_ENABLED_DTS_EAGLE := false
+BOARD_USES_SRS_TRUEMEDIA := false
+DTS_CODEC_M_ := false
+MM_AUDIO_ENABLED_SAFX := true
+AUDIO_FEATURE_ENABLED_HW_ACCELERATED_EFFECTS := false
+AUDIO_FEATURE_ENABLED_AUDIOSPHERE := true
+AUDIO_FEATURE_ENABLED_USB_TUNNEL_AUDIO := true
+AUDIO_FEATURE_ENABLED_SPLIT_A2DP := true
+AUDIO_FEATURE_ENABLED_3D_AUDIO := false
+AUDIO_FEATURE_ENABLED_VOICE_PRINT := false
+USE_LEGACY_AUDIO_DAEMON := false
+USE_LEGACY_AUDIO_MEASUREMENT := false
+DOLBY_ENABLE := false
+endif
+
+USE_XML_AUDIO_POLICY_CONF := 1
+BOARD_SUPPORTS_SOUND_TRIGGER := true
+AUDIO_USE_LL_AS_PRIMARY_OUTPUT := true
+AUDIO_FEATURE_ENABLED_HIFI_AUDIO := true
+AUDIO_FEATURE_ENABLED_VBAT_MONITOR := true
+AUDIO_FEATURE_ENABLED_ANC_HEADSET := true
+AUDIO_FEATURE_ENABLED_CUSTOMSTEREO := true
+AUDIO_FEATURE_ENABLED_FLUENCE := true
+AUDIO_FEATURE_ENABLED_HDMI_EDID := true
+AUDIO_FEATURE_ENABLED_HDMI_PASSTHROUGH := true
+#AUDIO_FEATURE_ENABLED_KEEP_ALIVE := true
+AUDIO_FEATURE_ENABLED_DISPLAY_PORT := true
+AUDIO_FEATURE_ENABLED_DS2_DOLBY_DAP := false
+AUDIO_FEATURE_ENABLED_HFP := true
+AUDIO_FEATURE_ENABLED_INCALL_MUSIC := false
+AUDIO_FEATURE_ENABLED_MULTI_VOICE_SESSIONS := true
+AUDIO_FEATURE_ENABLED_KPI_OPTIMIZE := true
+AUDIO_FEATURE_ENABLED_SPKR_PROTECTION := true
+AUDIO_FEATURE_ENABLED_ACDB_LICENSE := true
+AUDIO_FEATURE_ENABLED_DEV_ARBI := false
+MM_AUDIO_ENABLED_FTM := true
+TARGET_USES_QCOM_MM_AUDIO := true
+AUDIO_FEATURE_ENABLED_SOURCE_TRACKING := true
+AUDIO_FEATURE_ENABLED_GEF_SUPPORT := true
+BOARD_SUPPORTS_QAHW := false
+AUDIO_FEATURE_ENABLED_RAS := true
+AUDIO_FEATURE_ENABLED_SND_MONITOR := true
+##AUDIO_FEATURE_FLAGS
+
+#Audio Specific device overlays
+DEVICE_PACKAGE_OVERLAYS += hardware/qcom/audio/configs/common/overlay
+
+# Audio configuration file
+ifeq ($(TARGET_USES_AOSP_FOR_AUDIO), true)
+PRODUCT_COPY_FILES += \
+ device/qcom/common/media/audio_policy.conf:system/etc/audio_policy.conf
+else
+PRODUCT_COPY_FILES += \
+ hardware/qcom/audio/configs/msmpeafowl/audio_policy.conf:system/etc/audio_policy.conf
+endif
+
+PRODUCT_COPY_FILES += \
+ hardware/qcom/audio/configs/msmpeafowl/audio_output_policy.conf:$(TARGET_COPY_OUT_VENDOR)/etc/audio_output_policy.conf \
+ hardware/qcom/audio/configs/msmpeafowl/audio_effects.conf:$(TARGET_COPY_OUT_VENDOR)/etc/audio_effects.conf \
+ hardware/qcom/audio/configs/msmpeafowl/mixer_paths_tavil.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_tavil.xml \
+ hardware/qcom/audio/configs/msmpeafowl/mixer_paths.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths.xml \
+ hardware/qcom/audio/configs/msmpeafowl/mixer_paths_mtp.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_mtp.xml \
+ hardware/qcom/audio/configs/msmpeafowl/mixer_paths_tasha.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_tasha.xml \
+ hardware/qcom/audio/configs/msmpeafowl/mixer_paths_tashalite.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_tashalite.xml \
+ hardware/qcom/audio/configs/msmpeafowl/mixer_paths_i2s.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_i2s.xml \
+ hardware/qcom/audio/configs/msmpeafowl/audio_tuning_mixer.txt:$(TARGET_COPY_OUT_VENDOR)/etc/audio_tuning_mixer.txt \
+ hardware/qcom/audio/configs/msmpeafowl/audio_tuning_mixer_tavil.txt:$(TARGET_COPY_OUT_VENDOR)/etc/audio_tuning_mixer_tavil.txt \
+ hardware/qcom/audio/configs/msmpeafowl/audio_tuning_mixer_tasha.txt:$(TARGET_COPY_OUT_VENDOR)/etc/audio_tuning_mixer_tasha.txt \
+ hardware/qcom/audio/configs/msmpeafowl/audio_platform_info_intcodec.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_platform_info_intcodec.xml \
+ hardware/qcom/audio/configs/msmpeafowl/audio_platform_info_i2s.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_platform_info_i2s.xml \
+ hardware/qcom/audio/configs/msmpeafowl/audio_platform_info.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_platform_info.xml \
+ hardware/qcom/audio/configs/msmpeafowl/sound_trigger_platform_info.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_platform_info.xml \
+ hardware/qcom/audio/configs/msmpeafowl/sound_trigger_mixer_paths.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_mixer_paths.xml \
+ hardware/qcom/audio/configs/msmpeafowl/sound_trigger_mixer_paths_wcd9335.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_mixer_paths_wcd9335.xml \
+ hardware/qcom/audio/configs/msmpeafowl/sound_trigger_mixer_paths_wcd9340.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_mixer_paths_wcd9340.xml \
+ hardware/qcom/audio/configs/msmpeafowl/sound_trigger_mixer_paths_wcd9340.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_mixer_paths_wcd9340.xml \
+ hardware/qcom/audio/configs/msmpeafowl/graphite_ipc_platform_info.xml:$(TARGET_COPY_OUT_VENDOR)/etc/graphite_ipc_platform_info.xml \
+
+#XML Audio configuration files
+ifeq ($(USE_XML_AUDIO_POLICY_CONF), 1)
+ifneq ($(TARGET_USES_AOSP_FOR_AUDIO), true)
+PRODUCT_COPY_FILES += \
+ $(TOPDIR)hardware/qcom/audio/configs/msmpeafowl/audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio/audio_policy_configuration.xml
+endif
+PRODUCT_COPY_FILES += \
+ $(TOPDIR)hardware/qcom/audio/configs/common/audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_configuration.xml \
+ $(TOPDIR)frameworks/av/services/audiopolicy/config/a2dp_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/a2dp_audio_policy_configuration.xml \
+ $(TOPDIR)frameworks/av/services/audiopolicy/config/audio_policy_volumes.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_volumes.xml \
+ $(TOPDIR)frameworks/av/services/audiopolicy/config/default_volume_tables.xml:$(TARGET_COPY_OUT_VENDOR)/etc/default_volume_tables.xml \
+ $(TOPDIR)frameworks/av/services/audiopolicy/config/r_submix_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/r_submix_audio_policy_configuration.xml \
+ $(TOPDIR)frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/usb_audio_policy_configuration.xml
+endif
+
+# Listen configuration file
+PRODUCT_COPY_FILES += \
+ hardware/qcom/audio/configs/msmpeafowl/listen_platform_info.xml:$(TARGET_COPY_OUT_VENDOR)/etc/listen_platform_info.xml
+
+# Reduce client buffer size for fast audio output tracks
+PRODUCT_PROPERTY_OVERRIDES += \
+ af.fast_track_multiplier=1
+
+# Low latency audio buffer size in frames
+PRODUCT_PROPERTY_OVERRIDES += \
+ vendor.audio_hal.period_size=192
+
+##fluencetype can be "fluence" or "fluencepro" or "none"
+PRODUCT_PROPERTY_OVERRIDES += \
+ro.vendor.audio.sdk.fluencetype=none\
+persist.vendor.audio.fluence.voicecall=true\
+persist.vendor.audio.fluence.voicerec=false\
+persist.vendor.audio.fluence.speaker=true
+
+#disable tunnel encoding
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.tunnel.encode=false
+
+#Disable RAS Feature by default
+PRODUCT_PROPERTY_OVERRIDES += \
+persist.vendor.audio.ras.enabled=false
+
+#Buffer size in kbytes for compress offload playback
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.offload.buffer.size.kb=64
+
+#Minimum duration for offload playback in secs
+PRODUCT_PROPERTY_OVERRIDES += \
+audio.offload.min.duration.secs=30
+
+#Enable offload audio video playback by default
+PRODUCT_PROPERTY_OVERRIDES += \
+audio.offload.video=true
+
+#Enable audio track offload by default
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.offload.track.enable=true
+
+#Enable music through deep buffer
+PRODUCT_PROPERTY_OVERRIDES += \
+audio.deep_buffer.media=true
+
+#enable voice path for PCM VoIP by default
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.voice.path.for.pcm.voip=true
+
+#Enable multi channel aac through offload
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.offload.multiaac.enable=true
+
+#Enable DS2, Hardbypass feature for Dolby
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.dolby.ds2.enabled=false\
+vendor.audio.dolby.ds2.hardbypass=false
+
+#Disable Multiple offload sesison
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.offload.multiple.enabled=false
+
+#Disable Compress passthrough playback
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.offload.passthrough=false
+
+#Disable surround sound recording
+PRODUCT_PROPERTY_OVERRIDES += \
+ro.vendor.audio.sdk.ssr=false
+
+#enable dsp gapless mode by default
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.offload.gapless.enabled=true
+
+#enable pbe effects
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.safx.pbe.enabled=true
+
+#parser input buffer size(256kb) in byte stream mode
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.parser.ip.buffer.size=262144
+
+#flac sw decoder 24 bit decode capability
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.flac.sw.decoder.24bit=true
+
+#split a2dp DSP supported encoder list
+PRODUCT_PROPERTY_OVERRIDES += \
+persist.vendor.bt.a2dp_offload_cap=sbc-aptx-aptxhd-aac
+
+#enable software decoders for ALAC and APE
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.use.sw.alac.decoder=true
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.use.sw.ape.decoder=true
+
+#enable hw aac encoder by default
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.hw.aac.encoder=true
+
+#Disable FM a2dp concurrency
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.fm.a2dp.conc.disabled=true
+
+#audio becoming noisy intent broadcast delay
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.noisy.broadcast.delay=600
+
+#Enable HIFI audio support for internal codec
+PRODUCT_PROPERTY_OVERRIDES += \
+persist.vendor.audio.hifi.int_codec=true
+
+#offload pausetime out duration to 3 secs to inline with other outputs
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.offload.pstimeout.secs=3
+
+# for HIDL related packages
+PRODUCT_PACKAGES += \
+ android.hardware.audio@2.0-service \
+ android.hardware.audio@2.0-impl \
+ android.hardware.audio.effect@2.0-impl \
+ android.hardware.soundtrigger@2.0-impl
diff --git a/configs/msmpeafowl/sound_trigger_mixer_paths.xml b/configs/msmpeafowl/sound_trigger_mixer_paths.xml
new file mode 100644
index 0000000..7619e26
--- /dev/null
+++ b/configs/msmpeafowl/sound_trigger_mixer_paths.xml
@@ -0,0 +1,178 @@
+<?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="DEC2 MUX" value="ZERO" />
+ <ctl name="DEC3 MUX" value="ZERO" />
+ <ctl name="DEC4 MUX" value="ZERO" />
+ <ctl name="I2S TX2 INP1" value="ZERO" />
+ <ctl name="I2S TX2 INP2" value="ZERO" />
+
+ <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="DEC1 Volume" value="84" />
+ <ctl name="DEC1 MUX" value="DMIC3" />
+ </path>
+
+ <path name="listen-ape-handset-mic-preproc">
+ <path name="listen-ape-handset-mic"/>
+ </path>
+
+ <path name="listen-ape-handset-qmic">
+ <ctl name="INT3_MI2S_TX Channels" value="Four" />
+ <ctl name="DEC1 MUX" value="DMIC2" />
+ <ctl name="DEC2 MUX" value="DMIC1" />
+ <ctl name="DEC3 MUX" value="DMIC3" />
+ <ctl name="I2S TX2 INP1" value="DEC3" />
+ <ctl name="DEC4 MUX" value="DMIC4" />
+ <ctl name="I2S TX2 INP2" value="DEC4" />
+ </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/msmpeafowl/sound_trigger_mixer_paths_wcd9335.xml b/configs/msmpeafowl/sound_trigger_mixer_paths_wcd9335.xml
new file mode 100644
index 0000000..691b2e3
--- /dev/null
+++ b/configs/msmpeafowl/sound_trigger_mixer_paths_wcd9335.xml
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--- Copyright (c) 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 SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM2 Mixer SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM3 Mixer SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM4 Mixer SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM5 Mixer SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM6 Mixer SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM7 Mixer SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM8 Mixer SLIMBUS_5_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="SLIMBUS_5_TX LSM Function" value="None" />
+ <ctl name="MADONOFF Switch" value="0" />
+ <ctl name="MAD Input" value="DMIC1" />
+ <ctl name="MAD_BROADCAST Switch" value="0" />
+ <ctl name="TX13 INP MUX" value="CDC_DEC_5" />
+ <ctl name="AIF4_MAD Mixer SLIM TX12" value="0" />
+ <ctl name="AIF4_MAD Mixer SLIM TX13" value="0" />
+ <ctl name="CPE AFE MAD Enable" value="0"/>
+ <ctl name="CLK MODE" value="EXTERNAL" />
+ <ctl name="EC BUF MUX INP" value="ZERO" />
+ <ctl name="ADC MUX1" value="DMIC" />
+ <ctl name="DMIC MUX1" value="ZERO" />
+
+ <path name="listen-voice-wakeup-1">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM1 Port" value="SLIMBUS_5_TX" />
+ <ctl name="LSM1 Mixer SLIMBUS_5_TX" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-2">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM2 Port" value="SLIMBUS_5_TX" />
+ <ctl name="LSM2 Mixer SLIMBUS_5_TX" value="1" />
+ </path>
+ <path name="listen-voice-wakeup-3">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM3 Port" value="SLIMBUS_5_TX" />
+ <ctl name="LSM3 Mixer SLIMBUS_5_TX" value="1" />
+ </path>
+ <path name="listen-voice-wakeup-4">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM4 Port" value="SLIMBUS_5_TX" />
+ <ctl name="LSM4 Mixer SLIMBUS_5_TX" value="1" />
+ </path>
+ <path name="listen-voice-wakeup-5">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM5 Port" value="SLIMBUS_5_TX" />
+ <ctl name="LSM5 Mixer SLIMBUS_5_TX" value="1" />
+ </path>
+ <path name="listen-voice-wakeup-6">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM6 Port" value="SLIMBUS_5_TX" />
+ <ctl name="LSM6 Mixer SLIMBUS_5_TX" value="1" />
+ </path>
+ <path name="listen-voice-wakeup-7">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM7 Port" value="SLIMBUS_5_TX" />
+ <ctl name="LSM7 Mixer SLIMBUS_5_TX" value="1" />
+ </path>
+ <path name="listen-voice-wakeup-8">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM8 Port" value="SLIMBUS_5_TX" />
+ <ctl name="LSM8 Mixer SLIMBUS_5_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" />
+ <ctl name="AIF4_MAD Mixer SLIM TX13" value="1" />
+ <ctl name="MAD Input" value="DMIC2" />
+ <ctl name="CPE AFE MAD Enable" value="1"/>
+ </path>
+
+ <path name="listen-cpe-handset-mic-ecpp">
+ <ctl name="CLK MODE" value="INTERNAL" />
+ <ctl name="EC BUF MUX INP" value="DEC1" />
+ <ctl name="ADC MUX1" value="DMIC" />
+ <ctl name="DMIC MUX1" value="DMIC2" />
+ </path>
+
+ <!-- path name used for low bandwidth FTRT codec interface -->
+ <path name="listen-cpe-handset-mic low-speed-intf">
+ <ctl name="MADONOFF Switch" value="1" />
+ <ctl name="AIF4_MAD Mixer SLIM TX12" value="1" />
+ <ctl name="MAD Input" value="DMIC2" />
+ <ctl name="CPE AFE MAD Enable" value="1"/>
+ </path>
+
+ <path name="listen-ape-handset-mic">
+ <ctl name="MAD_BROADCAST Switch" value="1" />
+ <ctl name="TX13 INP MUX" value="MAD_BRDCST" />
+ <ctl name="AIF4_MAD Mixer SLIM TX13" value="1" />
+ <ctl name="MAD Input" value="DMIC2" />
+ </path>
+
+</mixer>
diff --git a/configs/msmpeafowl/sound_trigger_mixer_paths_wcd9340.xml b/configs/msmpeafowl/sound_trigger_mixer_paths_wcd9340.xml
new file mode 100644
index 0000000..d876fa7
--- /dev/null
+++ b/configs/msmpeafowl/sound_trigger_mixer_paths_wcd9340.xml
@@ -0,0 +1,332 @@
+<?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 SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM2 Mixer SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM3 Mixer SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM4 Mixer SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM5 Mixer SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM6 Mixer SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM7 Mixer SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM8 Mixer SLIMBUS_5_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="SLIMBUS_5_TX LSM Function" value="None" />
+ <ctl name="MADONOFF Switch" value="0" />
+ <ctl name="MAD Input" value="DMIC1" />
+ <ctl name="MAD_BROADCAST Switch" value="0" />
+ <ctl name="TX13 INP MUX" value="CDC_DEC_5" />
+ <ctl name="AIF4_MAD Mixer SLIM TX12" value="0" />
+ <ctl name="AIF4_MAD Mixer SLIM TX13" value="0" />
+ <ctl name="CPE AFE MAD Enable" value="0"/>
+ <ctl name="CLK MODE" value="EXTERNAL" />
+ <ctl name="EC BUF MUX INP" value="ZERO" />
+ <ctl name="ADC MUX1" value="DMIC" />
+ <ctl name="DMIC MUX1" value="ZERO" />
+ <ctl name="AIF1_CAP Mixer SLIM TX8" value="0"/>
+ <ctl name="AIF1_CAP Mixer SLIM TX7" value="0" />
+ <ctl name="AIF1_CAP Mixer SLIM TX6" value="0" />
+ <ctl name="AIF1_CAP Mixer SLIM TX5" value="0"/>
+ <ctl name="CDC_IF TX5 MUX" value="ZERO" />
+ <ctl name="CDC_IF TX6 MUX" value="ZERO" />
+ <ctl name="CDC_IF TX7 MUX" value="ZERO" />
+ <ctl name="CDC_IF TX8 MUX" 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= "ADC MUX0" value="AMIC" />
+ <ctl name= "ADC MUX1" value="AMIC" />
+ <ctl name= "ADC MUX2" value="AMIC" />
+ <ctl name= "DMIC MUX0" value="ZERO" />
+ <ctl name= "DMIC MUX2" value="ZERO" />
+ <ctl name= "WDMA3 PORT0 MUX" value="RX_MIX_TX0" />
+ <ctl name= "WDMA3 PORT1 MUX" value="RX_MIX_TX1" />
+ <ctl name= "WDMA3 PORT2 MUX" value="RX_MIX_TX2" />
+ <ctl name= "WDMA3 CH0 MUX" value="PORT_0" />
+ <ctl name= "WDMA3 CH1 MUX" value="PORT_0" />
+ <ctl name= "WDMA3 CH2 MUX" value="PORT_0" />
+ <ctl name= "WDMA3_ON_OFF Switch" value="0" />
+
+ <path name="listen-voice-wakeup-1">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM1 Port" value="SLIMBUS_5_TX" />
+ <ctl name="LSM1 Mixer SLIMBUS_5_TX" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-2">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM2 Port" value="SLIMBUS_5_TX" />
+ <ctl name="LSM2 Mixer SLIMBUS_5_TX" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-3">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM3 Port" value="SLIMBUS_5_TX" />
+ <ctl name="LSM3 Mixer SLIMBUS_5_TX" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-4">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM4 Port" value="SLIMBUS_5_TX" />
+ <ctl name="LSM4 Mixer SLIMBUS_5_TX" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-5">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM5 Port" value="SLIMBUS_5_TX" />
+ <ctl name="LSM5 Mixer SLIMBUS_5_TX" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-6">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM6 Port" value="SLIMBUS_5_TX" />
+ <ctl name="LSM6 Mixer SLIMBUS_5_TX" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-7">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM7 Port" value="SLIMBUS_5_TX" />
+ <ctl name="LSM7 Mixer SLIMBUS_5_TX" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-8">
+ <ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
+ <ctl name="LSM8 Port" value="SLIMBUS_5_TX" />
+ <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="MAD Input" value="DMIC2" />
+ <ctl name="MAD_SEL MUX" value="SPE" />
+ <ctl name="MAD_INP MUX" value="MAD" />
+ <ctl name="MAD_CPE1 Switch" value="1" />
+ </path>
+
+ <path name="listen-cpe-handset-tmic">
+ <ctl name="CLK MODE" value="INTERNAL" />
+ <ctl name= "ADC MUX0" value="DMIC" />
+ <ctl name= "DMIC MUX0" value="DMIC2" />
+ <ctl name= "DEC0 Volume" value="84" />
+ <ctl name= "ADC MUX1" value="DMIC" />
+ <ctl name= "DMIC MUX1" value="DMIC0" />
+ <ctl name= "DEC1 Volume" value="84" />
+ <ctl name= "ADC MUX2" value="DMIC" />
+ <ctl name= "DMIC MUX2" value="DMIC1" />
+ <ctl name= "DEC2 Volume" value="84" />
+ <ctl name= "WDMA3 PORT0 MUX" value="DEC0" />
+ <ctl name= "WDMA3 PORT1 MUX" value="DEC1" />
+ <ctl name= "WDMA3 PORT2 MUX" value="DEC2" />
+ <ctl name= "WDMA3 CH0 MUX" value="PORT_0" />
+ <ctl name= "WDMA3 CH1 MUX" value="PORT_1" />
+ <ctl name= "WDMA3 CH2 MUX" value="PORT_2" />
+ <ctl name= "WDMA3_ON_OFF Switch" value="1" />
+ </path>
+
+ <path name="listen-cpe-handset-qmic">
+ <ctl name="CLK MODE" value="INTERNAL" />
+ <ctl name= "ADC MUX0" value="DMIC" />
+ <ctl name= "DMIC MUX0" value="DMIC2" />
+ <ctl name= "DEC0 Volume" value="84" />
+ <ctl name= "ADC MUX1" value="DMIC" />
+ <ctl name= "DMIC MUX1" value="DMIC0" />
+ <ctl name= "DEC1 Volume" value="84" />
+ <ctl name= "ADC MUX2" value="DMIC" />
+ <ctl name= "DMIC MUX2" value="DMIC1" />
+ <ctl name= "DEC2 Volume" value="84" />
+ <ctl name= "ADC MUX3" value="DMIC" />
+ <ctl name= "DMIC MUX3" value="DMIC3" />
+ <ctl name= "DEC3 Volume" value="84" />
+ <ctl name= "WDMA3 PORT0 MUX" value="DEC0" />
+ <ctl name= "WDMA3 PORT1 MUX" value="DEC1" />
+ <ctl name= "WDMA3 PORT2 MUX" value="DEC2" />
+ <ctl name= "WDMA3 PORT3 MUX" value="DEC3" />
+ <ctl name= "WDMA3 CH0 MUX" value="PORT_0" />
+ <ctl name= "WDMA3 CH1 MUX" value="PORT_1" />
+ <ctl name= "WDMA3 CH2 MUX" value="PORT_2" />
+ <ctl name= "WDMA3 CH3 MUX" value="PORT_3" />
+ <ctl name= "WDMA3_ON_OFF Switch" value="1" />
+ </path>
+
+ <path name="listen-cpe-headset-mic">
+ <ctl name="MAD Input" value="ADC2" />
+ <ctl name="MAD_SEL MUX" value="SPE" />
+ <ctl name="MAD_INP MUX" value="MAD" />
+ <ctl name="MAD_CPE1 Switch" value="1" />
+ </path>
+
+ <path name="listen-cpe-handset-mic-ecpp">
+ <ctl name="CLK MODE" value="INTERNAL" />
+ <ctl name="EC BUF MUX INP" value="DEC1" />
+ <ctl name="ADC MUX1" value="DMIC" />
+ <ctl name="DMIC MUX1" value="DMIC2" />
+ </path>
+
+ <!-- path name used for low bandwidth FTRT codec interface -->
+ <path name="listen-cpe-handset-mic low-speed-intf">
+ <ctl name="MADONOFF Switch" value="1" />
+ <ctl name="AIF4_MAD Mixer SLIM TX12" value="1" />
+ <ctl name="MAD Input" value="DMIC2" />
+ <ctl name="CPE AFE MAD Enable" value="1"/>
+ </path>
+
+ <path name="listen-ape-handset-mic">
+ <ctl name="MAD Input" value="DMIC2" />
+ <ctl name="MAD_SEL MUX" value="MSM" />
+ <ctl name="MAD_INP MUX" value="MAD" />
+ <ctl name="MAD_BROADCAST Switch" value="1" />
+ <ctl name="CDC_IF TX13 MUX" value="MAD_BRDCST" />
+ <ctl name="AIF4_MAD Mixer SLIM TX13" value="1" />
+ </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="CDC_IF TX7 MUX" value="DEC7" />
+ <ctl name="ADC MUX7" value="DMIC" />
+ <ctl name="DMIC MUX7" value="DMIC2" />
+ <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="CDC_IF TX7 MUX" value="DEC7" />
+ <ctl name="ADC MUX7" value="DMIC" />
+ <ctl name="DMIC MUX7" value="DMIC1" />
+ <ctl name="CDC_IF TX8 MUX" value="DEC8" />
+ <ctl name="ADC MUX8" value="DMIC" />
+ <ctl name="DMIC MUX8" value="DMIC5" />
+ <ctl name="SLIM_0_TX Channels" value="Two" />
+ </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="CDC_IF TX5 MUX" value="DEC5" />
+ <ctl name="ADC MUX5" value="DMIC" />
+ <ctl name="DMIC MUX5" value="DMIC1" />
+ <ctl name="CDC_IF TX6 MUX" value="DEC6" />
+ <ctl name="ADC MUX6" value="DMIC" />
+ <ctl name="DMIC MUX6" value="DMIC5" />
+ <ctl name="CDC_IF TX7 MUX" value="DEC7" />
+ <ctl name="ADC MUX7" value="DMIC" />
+ <ctl name="DMIC MUX7" value="DMIC2" />
+ </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="CDC_IF TX5 MUX" value="DEC5" />
+ <ctl name="ADC MUX5" value="DMIC" />
+ <ctl name="DMIC MUX5" value="DMIC1" />
+ <ctl name="CDC_IF TX6 MUX" value="DEC6" />
+ <ctl name="ADC MUX6" value="DMIC" />
+ <ctl name="DMIC MUX6" value="DMIC5" />
+ <ctl name="CDC_IF TX7 MUX" value="DEC7" />
+ <ctl name="ADC MUX7" value="DMIC" />
+ <ctl name="DMIC MUX7" value="DMIC2" />
+ <ctl name="CDC_IF TX8 MUX" value="DEC8" />
+ <ctl name="ADC MUX8" value="DMIC" />
+ <ctl name="DMIC MUX8" value="DMIC0" />
+ </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/msmpeafowl/sound_trigger_platform_info.xml b/configs/msmpeafowl/sound_trigger_platform_info.xml
new file mode 100644
index 0000000..b9e36f5
--- /dev/null
+++ b/configs/msmpeafowl/sound_trigger_platform_info.xml
@@ -0,0 +1,213 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--- 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 -->
+<!--- 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. -->
+<sound_trigger_platform_info>
+ <param version="0x0101" /> <!-- this must be the first param -->
+ <common_config>
+ <param max_cpe_sessions="1" />
+ <param max_wdsp_sessions="2" />
+ <param max_ape_sessions="8" />
+ <param enable_failure_detection="false" />
+ <param support_device_switch="false" />
+ <!-- Transition will only occur if execution_type="DYNAMIC" -->
+ <param transit_to_adsp_on_playback="false" />
+ <!-- Below backend params must match with port used in mixer path file -->
+ <!-- param used to configure backend sample rate, format and channels -->
+ <param backend_port_name="SLIM_0_TX" />
+ <!-- Param used to match and obtain device backend index -->
+ <param backend_dai_name="SLIMBUS_0_TX" />
+ </common_config>
+ <acdb_ids>
+ <param DEVICE_HANDSET_MIC_APE="100" />
+ <param DEVICE_HANDSET_MIC_CPE="128" />
+ <param DEVICE_HANDSET_MIC_ECPP_CPE="128" />
+ <param DEVICE_HANDSET_TMIC_CPE="130" />
+ <param DEVICE_HANDSET_MIC_PP_APE="135" />
+ <param DEVICE_HANDSET_QMIC_APE="137" />
+ <param DEVICE_HEADSET_MIC_CPE="139" />
+ <param DEVICE_HANDSET_DMIC_APE="149" />
+ </acdb_ids>
+ <!-- Multiple sound_model_config tags can be listed, each with unique -->
+ <!-- vendor_uuid. The below tag represents QTI SVA engine sound model -->
+ <!-- configuration. ISV must use their own unique vendor_uuid. -->
+ <sound_model_config>
+ <param vendor_uuid="68ab2d40-e860-11e3-95ef-0002a5d5c51b" />
+ <param execution_type="WDSP" /> <!-- value: "WDSP" "ADSP" "DYNAMIC" -->
+ <param app_type="2" /> <!-- app type used in ACDB -->
+ <param library="libsmwrapper.so" />
+ <param max_cpe_phrases="6" />
+ <param max_cpe_users="3" />
+ <param max_ape_phrases="10" />
+ <param max_ape_users="10" />
+ <!-- Profile specific data which the algorithm can support -->
+ <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="FLUENCE_QMIC" />
+ <!-- wdsp_fluence_type: fluence disabled: "NONE" -->
+ <!-- fluence enabled: "FLUENCE_DMIC", "FLUENCE_TMIC", "FLUENCE_QMIC" -->
+ <param wdsp_fluence_type="NONE" />
+ <gcs_usecase>
+ <param uid="0x1" />
+ <!-- module_id, instance_id, param_id -->
+ <param load_sound_model_ids="0x00012C0D, 0x2, 0x00012C14" />
+ <param confidence_levels_ids="0x00012C0D, 0x2, 0x00012C28" />
+ <param detection_event_ids="0x00012C0D, 0x2, 0x00012C29" />
+ <param read_cmd_ids="0x00020013, 0x2, 0x00020015" />
+ <param read_rsp_ids="0x00020013, 0x2, 0x00020016" />
+ <param custom_config_ids="0x00012C0D, 0x2, 0x00012C20" />
+ </gcs_usecase>
+ <gcs_usecase>
+ <param uid="0x2" />
+ <param load_sound_model_ids="0x00012C0D, 0x3, 0x00012C14" />
+ <param confidence_levels_ids="0x00012C0D, 0x3, 0x00012C28" />
+ <param detection_event_ids="0x00012C0D, 0x3, 0x00012C29" />
+ <param read_cmd_ids="0x00020013, 0x3, 0x00020015" />
+ <param read_rsp_ids="0x00020013, 0x3, 0x00020016" />
+ <param custom_config_ids="0x00012C0D, 0x3, 0x00012C20" />
+ </gcs_usecase>
+ <!-- Module and param ids with which the algorithm is integrated
+ in non-graphite firmware (note these must come after gcs params)
+ Extends flexibility to have different ids based on execution type.
+ valid execution_type values: "WDSP" "ADSP" -->
+ <lsm_usecase>
+ <param execution_mode="ADSP" />
+ <param load_sound_model_ids="0x00012C0D, 0x00012C14" />
+ <param unload_sound_model_ids="0x00012C0D, 0x00012C15" />
+ <param confidence_levels_ids="0x00012C0D, 0x00012C07" />
+ <param operation_mode_ids="0x00012C0D, 0x00012C02" />
+ <param polling_enable_ids="0x00012C0D, 0x00012C1B" />
+ <param custom_config_ids="0x00012C0D, 0x00012C20" />
+ </lsm_usecase>
+
+ <lsm_usecase>
+ <param execution_mode="WDSP" />
+ <param load_sound_model_ids="0x00012C0D, 0x00012C14" />
+ <param unload_sound_model_ids="0x00012C0D, 0x00012C15" />
+ <param confidence_levels_ids="0x00012C0D, 0x00012C07" />
+ <param operation_mode_ids="0x00012C0D, 0x00012C02" />
+ <param custom_config_ids="0x00012C0D, 0x00012C20" />
+ </lsm_usecase>
+
+ <!-- format: "ADPCM_packet" or "PCM_packet" !-->
+ <!-- transfer_mode: "FTRT" or "RT" -->
+ <!-- kw_duration is in milli seconds. It is valid only for FTRT
+ transfer mode -->
+ <param capture_keyword="PCM_packet, RT, 2000" />
+ <param client_capture_read_delay="2000" />
+ </sound_model_config>
+
+<!-- Sound model config for Hotword !-->
+ <sound_model_config>
+ <param vendor_uuid="7038ddc8-30f2-11e6-b0ac-40a8f03d3f15" />
+ <param execution_type="WDSP" /> <!-- value: "WDSP" "ADSP" "DYNAMIC" -->
+ <param app_type="3" /> <!-- app type used in ACDB -->
+ <param library="none" />
+ <param max_cpe_phrases="1" />
+ <param max_cpe_users="1" />
+ <param max_ape_phrases="1" />
+ <param max_ape_users="1" />
+ <!-- Profile specific data which the algorithm can support -->
+ <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="FLUENCE_QMIC" />
+ <!-- wdsp_fluence_type: fluence disabled: "NONE" -->
+ <!-- fluence enabled: "FLUENCE_DMIC", "FLUENCE_TMIC", "FLUENCE_QMIC" -->
+ <param wdsp_fluence_type="NONE" />
+ <gcs_usecase>
+ <param uid="0x3" />
+ <param load_sound_model_ids="0x18000001, 0x4, 0x00012C14" />
+ <param confidence_levels_ids="0x18000001, 0x4, 0x00012C28" />
+ <param detection_event_ids="0x18000001, 0x4, 0x00012C29" />
+ <param read_cmd_ids="0x00020013, 0x4, 0x00020015" />
+ <param read_rsp_ids="0x00020013, 0x4, 0x00020016" />
+ <param custom_config_ids="0x18000001, 0x4, 0x00012C20" />
+ </gcs_usecase>
+ <!-- Module and param ids with which the algorithm is integrated
+ in non-graphite firmware (note these must come after gcs params)
+ Extends flexibility to have different ids based on execution type.
+ valid execution_type values: "WDSP" "ADSP" -->
+ <lsm_usecase>
+ <param execution_mode="ADSP" />
+ <param load_sound_model_ids="0x18000001, 0x00012C14" />
+ <param unload_sound_model_ids="0x18000001, 0x00012C15" />
+ <param confidence_levels_ids="0x18000001, 0x00012C07" />
+ <param operation_mode_ids="0x18000001, 0x00012C02" />
+ <param polling_enable_ids="0x18000001, 0x00012C1B" />
+ <param custom_config_ids="0x18000001, 0x00012C20" />
+ </lsm_usecase>
+
+ <lsm_usecase>
+ <param execution_mode="WDSP" />
+ <param load_sound_model_ids="0x18000001, 0x00012C14" />
+ <param unload_sound_model_ids="0x18000001, 0x00012C15" />
+ <param confidence_levels_ids="0x18000001, 0x00012C07" />
+ <param operation_mode_ids="0x18000001, 0x00012C02" />
+ <param custom_config_ids="0x18000001, 0x00012C20" />
+ </lsm_usecase>
+
+ <!-- format: "ADPCM_packet" or "PCM_packet" !-->
+ <!-- transfer_mode: "FTRT" or "RT" -->
+ <!-- kw_duration is in milli seconds. It is valid only for FTRT
+ transfer mode -->
+ <param capture_keyword="PCM_packet, RT, 2000" />
+ <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>
+
+ <!-- backend_type tag defines backend type for each device -->
+ <!-- Default value is assumed for devices that are not listed here -->
+ <backend_type>
+ <param DEVICE_HANDSET_MIC_ECPP_CPE="BACKEND_ECPP" />
+ </backend_type>
+</sound_trigger_platform_info>
diff --git a/configs/sdm660/audio_platform_info.xml b/configs/sdm660/audio_platform_info.xml
index 00d64c3..313c59b 100644
--- a/configs/sdm660/audio_platform_info.xml
+++ b/configs/sdm660/audio_platform_info.xml
@@ -116,6 +116,8 @@
<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_SCO" backend="speaker-and-bt-sco" interface="SLIMBUS_0_RX-and-SLIMBUS_7_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB" backend="speaker-and-bt-sco-wb" interface="SLIMBUS_0_RX-and-SLIMBUS_7_RX"/>
<device name="SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP" interface="INT4_MI2S_RX-and-SLIMBUS_7_RX"/>
<device name="SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET" interface="INT4_MI2S_RX"/>
<device name="SND_DEVICE_OUT_ANC_FB_HEADSET" interface="INT0_MI2S_RX"/>
diff --git a/configs/sdm660/audio_platform_info_skush.xml b/configs/sdm660/audio_platform_info_skush.xml
index 4572aa7..76fc963 100644
--- a/configs/sdm660/audio_platform_info_skush.xml
+++ b/configs/sdm660/audio_platform_info_skush.xml
@@ -116,6 +116,8 @@
<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_SCO" backend="speaker-and-bt-sco" interface="SLIMBUS_0_RX-and-SLIMBUS_7_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB" backend="speaker-and-bt-sco-wb" interface="SLIMBUS_0_RX-and-SLIMBUS_7_RX"/>
<device name="SND_DEVICE_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"/>
diff --git a/configs/sdm660/audio_policy_configuration.xml b/configs/sdm660/audio_policy_configuration.xml
index 09a4bb9..9a67a32 100644
--- a/configs/sdm660/audio_policy_configuration.xml
+++ b/configs/sdm660/audio_policy_configuration.xml
@@ -326,7 +326,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/sdm660/mixer_paths.xml b/configs/sdm660/mixer_paths.xml
index 75082c7..459ffa1 100644
--- a/configs/sdm660/mixer_paths.xml
+++ b/configs/sdm660/mixer_paths.xml
@@ -67,6 +67,7 @@
<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="MultiMedia16 Mixer SLIM_7_TX" value="0" />
<ctl name="HDMI Mixer MultiMedia1" value="0" />
<ctl name="HDMI Mixer MultiMedia2" value="0" />
<ctl name="HDMI Mixer MultiMedia3" value="0" />
@@ -2256,4 +2257,59 @@
<path name="audio-ull-playback bt-a2dp" />
<path name="audio-ull-playback" />
</path>
+
+ <path name="mmap-playback">
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback headphones">
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback speaker-and-headphones">
+ <path name="mmap-playback" />
+ <path name="mmap-playback headphones" />
+ </path>
+
+ <path name="mmap-playback bt-sco">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback bt-sco-wb">
+ <ctl name="BT SampleRate" value="16000" />
+ <path name="mmap-playback bt-sco" />
+ </path>
+
+ <path name="mmap-playback afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-record">
+ <ctl name="MultiMedia16 Mixer SLIM_0_TX" value="1" />
+ </path>
+
+ <path name="mmap-record bt-sco">
+ <ctl name="MultiMedia16 Mixer SLIM_7_TX" value="1" />
+ </path>
+
+ <path name="mmap-record bt-sco-wb">
+ <ctl name="AUX PCM SampleRate" value="16000" />
+ <path name="mmap-record bt-sco" />
+ </path>
+
+ <path name="mmap-record capture-fm">
+ <ctl name="MultiMedia16 Mixer TERT_MI2S_TX" value="1" />
+ </path>
+
+ <path name="mmap-record usb-headset-mic">
+ <ctl name="MultiMedia16 Mixer USB_AUDIO_TX" value="1" />
+ </path>
</mixer>
diff --git a/configs/sdm660/mixer_paths_mtp.xml b/configs/sdm660/mixer_paths_mtp.xml
index fa9471f..bba3cb9 100644
--- a/configs/sdm660/mixer_paths_mtp.xml
+++ b/configs/sdm660/mixer_paths_mtp.xml
@@ -479,6 +479,16 @@
<path name="deep-buffer-playback" />
</path>
+ <path name="deep-buffer-playback speaker-and-bt-sco">
+ <path name="deep-buffer-playback bt-sco" />
+ <path name="deep-buffer-playback" />
+ </path>
+
+ <path name="deep-buffer-playback speaker-and-bt-sco-wb">
+ <path name="deep-buffer-playback bt-sco-wb" />
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="low-latency-playback">
<ctl name="INT4_MI2S_RX Audio Mixer MultiMedia5" value="1" />
</path>
@@ -540,6 +550,16 @@
<path name="low-latency-playback" />
</path>
+ <path name="low-latency-playback speaker-and-bt-sco">
+ <path name="low-latency-playback bt-sco" />
+ <path name="low-latency-playback" />
+ </path>
+
+ <path name="low-latency-playback speaker-and-bt-sco-wb">
+ <path name="low-latency-playback bt-sco-wb" />
+ <path name="low-latency-playback" />
+ </path>
+
<path name="audio-ull-playback">
<ctl name="INT4_MI2S_RX Audio Mixer MultiMedia8" value="1" />
</path>
@@ -596,6 +616,16 @@
<ctl name="USB_AUDIO_RX Audio Mixer MultiMedia8" value="1" />
</path>
+ <path name="audio-ull-playback speaker-and-bt-sco">
+ <path name="audio-ull-playback bt-sco" />
+ <path name="audio-ull-playback" />
+ </path>
+
+ <path name="audio-ull-playback speaker-and-bt-sco-wb">
+ <path name="audio-ull-playback bt-sco-wb" />
+ <path name="audio-ull-playback" />
+ </path>
+
<path name="multi-channel-playback hdmi">
<ctl name="HDMI Mixer MultiMedia2" value="1" />
</path>
@@ -684,6 +714,16 @@
<path name="compress-offload-playback" />
</path>
+ <path name="compress-offload-playback speaker-and-bt-sco">
+ <path name="compress-offload-playback bt-sco" />
+ <path name="compress-offload-playback" />
+ </path>
+
+ <path name="compress-offload-playback speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback bt-sco-wb" />
+ <path name="compress-offload-playback" />
+ </path>
+
<path name="compress-offload-playback2">
<ctl name="INT4_MI2S_RX Audio Mixer MultiMedia7" value="1" />
</path>
@@ -748,6 +788,16 @@
<path name="compress-offload-playback2" />
</path>
+ <path name="compress-offload-playback2 speaker-and-bt-sco">
+ <path name="compress-offload-playback2 bt-sco" />
+ <path name="compress-offload-playback2" />
+ </path>
+
+ <path name="compress-offload-playback2 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback2 bt-sco-wb" />
+ <path name="compress-offload-playback2" />
+ </path>
+
<path name="compress-offload-playback3">
<ctl name="INT4_MI2S_RX Audio Mixer MultiMedia10" value="1" />
</path>
@@ -812,6 +862,16 @@
<path name="compress-offload-playback3" />
</path>
+ <path name="compress-offload-playback3 speaker-and-bt-sco">
+ <path name="compress-offload-playback3 bt-sco" />
+ <path name="compress-offload-playback3" />
+ </path>
+
+ <path name="compress-offload-playback3 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback3 bt-sco-wb" />
+ <path name="compress-offload-playback3" />
+ </path>
+
<path name="compress-offload-playback4">
<ctl name="INT4_MI2S_RX Audio Mixer MultiMedia11" value="1" />
</path>
@@ -877,6 +937,16 @@
<path name="compress-offload-playback4" />
</path>
+ <path name="compress-offload-playback4 speaker-and-bt-sco">
+ <path name="compress-offload-playback4 bt-sco" />
+ <path name="compress-offload-playback4" />
+ </path>
+
+ <path name="compress-offload-playback4 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback4 bt-sco-wb" />
+ <path name="compress-offload-playback4" />
+ </path>
+
<path name="compress-offload-playback5">
<ctl name="INT4_MI2S_RX Audio Mixer MultiMedia12" value="1" />
</path>
@@ -941,6 +1011,16 @@
<path name="compress-offload-playback5" />
</path>
+ <path name="compress-offload-playback5 speaker-and-bt-sco">
+ <path name="compress-offload-playback5 bt-sco" />
+ <path name="compress-offload-playback5" />
+ </path>
+
+ <path name="compress-offload-playback5 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback5 bt-sco-wb" />
+ <path name="compress-offload-playback5" />
+ </path>
+
<path name="compress-offload-playback6">
<ctl name="INT4_MI2S_RX Audio Mixer MultiMedia13" value="1" />
</path>
@@ -1005,6 +1085,16 @@
<path name="compress-offload-playback6" />
</path>
+ <path name="compress-offload-playback6 speaker-and-bt-sco">
+ <path name="compress-offload-playback6 bt-sco" />
+ <path name="compress-offload-playback6" />
+ </path>
+
+ <path name="compress-offload-playback6 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback6 bt-sco-wb" />
+ <path name="compress-offload-playback6" />
+ </path>
+
<path name="compress-offload-playback7">
<ctl name="INT4_MI2S_RX Audio Mixer MultiMedia14" value="1" />
</path>
@@ -1069,6 +1159,16 @@
<path name="compress-offload-playback7" />
</path>
+ <path name="compress-offload-playback7 speaker-and-bt-sco">
+ <path name="compress-offload-playback7 bt-sco" />
+ <path name="compress-offload-playback7" />
+ </path>
+
+ <path name="compress-offload-playback7 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback7 bt-sco-wb" />
+ <path name="compress-offload-playback7" />
+ </path>
+
<path name="compress-offload-playback8">
<ctl name="INT4_MI2S_RX Audio Mixer MultiMedia15" value="1" />
</path>
@@ -1133,6 +1233,16 @@
<path name="compress-offload-playback8" />
</path>
+ <path name="compress-offload-playback8 speaker-and-bt-sco">
+ <path name="compress-offload-playback8 bt-sco" />
+ <path name="compress-offload-playback8" />
+ </path>
+
+ <path name="compress-offload-playback8 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback8 bt-sco-wb" />
+ <path name="compress-offload-playback8" />
+ </path>
+
<path name="compress-offload-playback9">
<ctl name="INT4_MI2S_RX Audio Mixer MultiMedia16" value="1" />
</path>
@@ -1197,6 +1307,16 @@
<path name="compress-offload-playback9" />
</path>
+ <path name="compress-offload-playback9 speaker-and-bt-sco">
+ <path name="compress-offload-playback9 bt-sco" />
+ <path name="compress-offload-playback9" />
+ </path>
+
+ <path name="compress-offload-playback9 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback9 bt-sco-wb" />
+ <path name="compress-offload-playback9" />
+ </path>
+
<path name="audio-record">
<ctl name="MultiMedia1 Mixer INT3_MI2S_TX" value="1" />
</path>
diff --git a/configs/sdm660/mixer_paths_skus.xml b/configs/sdm660/mixer_paths_skus.xml
index 98b0733..8ecc1a3 100644
--- a/configs/sdm660/mixer_paths_skus.xml
+++ b/configs/sdm660/mixer_paths_skus.xml
@@ -679,6 +679,16 @@
<ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia1" value="1" />
</path>
+ <path name="deep-buffer-playback speaker-and-bt-sco">
+ <path name="deep-buffer-playback bt-sco" />
+ <path name="deep-buffer-playback" />
+ </path>
+
+ <path name="deep-buffer-playback speaker-and-bt-sco-wb">
+ <path name="deep-buffer-playback bt-sco-wb" />
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="deep-buffer-playback speaker-and-headphones">
<path name="deep-buffer-playback headphones" />
<path name="deep-buffer-playback" />
@@ -740,6 +750,16 @@
<ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia5" value="1" />
</path>
+ <path name="low-latency-playback speaker-and-bt-sco">
+ <path name="low-latency-playback bt-sco" />
+ <path name="low-latency-playback" />
+ </path>
+
+ <path name="low-latency-playback speaker-and-bt-sco-wb">
+ <path name="low-latency-playback bt-sco-wb" />
+ <path name="low-latency-playback" />
+ </path>
+
<path name="low-latency-playback speaker-and-headphones">
<path name="low-latency-playback headphones" />
<path name="low-latency-playback" />
@@ -789,6 +809,17 @@
<path name="audio-ull-playback" />
</path>
+
+ <path name="audio-ull-playback speaker-and-bt-sco">
+ <path name="audio-ull-playback bt-sco" />
+ <path name="audio-ull-playback" />
+ </path>
+
+ <path name="audio-ull-playback speaker-and-bt-sco-wb">
+ <path name="audio-ull-playback bt-sco-wb" />
+ <path name="audio-ull-playback" />
+ </path>
+
<path name="audio-ull-playback afe-proxy">
<ctl name="AFE_PCM_RX Audio Mixer MultiMedia8" value="1" />
</path>
@@ -886,6 +917,16 @@
<path name="compress-offload-playback" />
</path>
+ <path name="compress-offload-playback speaker-and-bt-sco">
+ <path name="compress-offload-playback bt-sco" />
+ <path name="compress-offload-playback" />
+ </path>
+
+ <path name="compress-offload-playback speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback bt-sco-wb" />
+ <path name="compress-offload-playback" />
+ </path>
+
<path name="compress-offload-playback2">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia7" value="1" />
</path>
@@ -947,6 +988,16 @@
<path name="compress-offload-playback2" />
</path>
+ <path name="compress-offload-playback2 speaker-and-bt-sco">
+ <path name="compress-offload-playback2 bt-sco" />
+ <path name="compress-offload-playback2" />
+ </path>
+
+ <path name="compress-offload-playback2 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback2 bt-sco-wb" />
+ <path name="compress-offload-playback2" />
+ </path>
+
<path name="compress-offload-playback3">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia10" value="1" />
</path>
@@ -1008,6 +1059,16 @@
<path name="compress-offload-playback3" />
</path>
+ <path name="compress-offload-playback3 speaker-and-bt-sco">
+ <path name="compress-offload-playback3 bt-sco" />
+ <path name="compress-offload-playback3" />
+ </path>
+
+ <path name="compress-offload-playback3 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback3 bt-sco-wb" />
+ <path name="compress-offload-playback3" />
+ </path>
+
<path name="compress-offload-playback4">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia11" value="1" />
</path>
@@ -1070,6 +1131,16 @@
<path name="compress-offload-playback4" />
</path>
+ <path name="compress-offload-playback4 speaker-and-bt-sco">
+ <path name="compress-offload-playback4 bt-sco" />
+ <path name="compress-offload-playback4" />
+ </path>
+
+ <path name="compress-offload-playback4 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback4 bt-sco-wb" />
+ <path name="compress-offload-playback4" />
+ </path>
+
<path name="compress-offload-playback5">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia12" value="1" />
</path>
@@ -1131,6 +1202,16 @@
<path name="compress-offload-playback5" />
</path>
+ <path name="compress-offload-playback5 speaker-and-bt-sco">
+ <path name="compress-offload-playback5 bt-sco" />
+ <path name="compress-offload-playback5" />
+ </path>
+
+ <path name="compress-offload-playback5 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback5 bt-sco-wb" />
+ <path name="compress-offload-playback5" />
+ </path>
+
<path name="compress-offload-playback6">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia13" value="1" />
</path>
@@ -1192,6 +1273,16 @@
<path name="compress-offload-playback6" />
</path>
+ <path name="compress-offload-playback6 speaker-and-bt-sco">
+ <path name="compress-offload-playback6 bt-sco" />
+ <path name="compress-offload-playback6" />
+ </path>
+
+ <path name="compress-offload-playback6 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback6 bt-sco-wb" />
+ <path name="compress-offload-playback6" />
+ </path>
+
<path name="compress-offload-playback7">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia14" value="1" />
</path>
@@ -1253,6 +1344,16 @@
<path name="compress-offload-playback7" />
</path>
+ <path name="compress-offload-playback7 speaker-and-bt-sco">
+ <path name="compress-offload-playback7 bt-sco" />
+ <path name="compress-offload-playback7" />
+ </path>
+
+ <path name="compress-offload-playback7 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback7 bt-sco-wb" />
+ <path name="compress-offload-playback7" />
+ </path>
+
<path name="compress-offload-playback8">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia15" value="1" />
</path>
@@ -1314,6 +1415,16 @@
<path name="compress-offload-playback8" />
</path>
+ <path name="compress-offload-playback8 speaker-and-bt-sco">
+ <path name="compress-offload-playback8 bt-sco" />
+ <path name="compress-offload-playback8" />
+ </path>
+
+ <path name="compress-offload-playback8 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback8 bt-sco-wb" />
+ <path name="compress-offload-playback8" />
+ </path>
+
<path name="compress-offload-playback9">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia16" value="1" />
</path>
@@ -1375,6 +1486,16 @@
<path name="compress-offload-playback9" />
</path>
+ <path name="compress-offload-playback9 speaker-and-bt-sco">
+ <path name="compress-offload-playback9 bt-sco" />
+ <path name="compress-offload-playback9" />
+ </path>
+
+ <path name="compress-offload-playback9 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback9 bt-sco-wb" />
+ <path name="compress-offload-playback9" />
+ </path>
+
<path name="audio-record">
<ctl name="MultiMedia1 Mixer SLIM_0_TX" value="1" />
</path>
@@ -2516,7 +2637,7 @@
<ctl name="DMIC MUX7" value="DMIC5" />
<ctl name="SLIM TX8 MUX" value="DEC8" />
<ctl name="ADC MUX8" value="DMIC" />
- <ctl name="DMIC MUX8" value="DMIC1" />
+ <ctl name="DMIC MUX8" value="DMIC5" />
</path>
<path name="speaker-qmic-liquid">
diff --git a/configs/sdm660/mixer_paths_skush.xml b/configs/sdm660/mixer_paths_skush.xml
index 054515d..cf0838f 100644
--- a/configs/sdm660/mixer_paths_skush.xml
+++ b/configs/sdm660/mixer_paths_skush.xml
@@ -474,6 +474,16 @@
<ctl name="INT0_MI2S_RX Audio Mixer MultiMedia1" value="1" />
</path>
+ <path name="deep-buffer-playback speaker-and-bt-sco">
+ <path name="deep-buffer-playback bt-sco" />
+ <path name="deep-buffer-playback" />
+ </path>
+
+ <path name="deep-buffer-playback speaker-and-bt-sco-wb">
+ <path name="deep-buffer-playback bt-sco-wb" />
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="deep-buffer-playback speaker-and-headphones">
<path name="deep-buffer-playback headphones" />
<path name="deep-buffer-playback" />
@@ -544,6 +554,16 @@
<path name="low-latency-playback" />
</path>
+ <path name="low-latency-playback speaker-and-bt-sco">
+ <path name="low-latency-playback bt-sco" />
+ <path name="low-latency-playback" />
+ </path>
+
+ <path name="low-latency-playback speaker-and-bt-sco-wb">
+ <path name="low-latency-playback bt-sco-wb" />
+ <path name="low-latency-playback" />
+ </path>
+
<path name="audio-ull-playback">
<ctl name="INT4_MI2S_RX Audio Mixer MultiMedia8" value="1" />
</path>
@@ -592,6 +612,16 @@
<path name="audio-ull-playback" />
</path>
+ <path name="audio-ull-playback speaker-and-bt-sco">
+ <path name="audio-ull-playback bt-sco" />
+ <path name="audio-ull-playback" />
+ </path>
+
+ <path name="audio-ull-playback speaker-and-bt-sco-wb">
+ <path name="audio-ull-playback bt-sco-wb" />
+ <path name="audio-ull-playback" />
+ </path>
+
<path name="audio-ull-playback afe-proxy">
<ctl name="AFE_PCM_RX Audio Mixer MultiMedia8" value="1" />
</path>
@@ -696,6 +726,16 @@
<path name="compress-offload-playback" />
</path>
+ <path name="compress-offload-playback speaker-and-bt-sco">
+ <path name="compress-offload-playback bt-sco" />
+ <path name="compress-offload-playback" />
+ </path>
+
+ <path name="compress-offload-playback speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback bt-sco-wb" />
+ <path name="compress-offload-playback" />
+ </path>
+
<path name="compress-offload-playback2">
<ctl name="INT4_MI2S_RX Audio Mixer MultiMedia7" value="1" />
</path>
@@ -764,6 +804,16 @@
<path name="compress-offload-playback2" />
</path>
+ <path name="compress-offload-playback2 speaker-and-bt-sco">
+ <path name="compress-offload-playback2 bt-sco" />
+ <path name="compress-offload-playback2" />
+ </path>
+
+ <path name="compress-offload-playback2 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback2 bt-sco-wb" />
+ <path name="compress-offload-playback2" />
+ </path>
+
<path name="compress-offload-playback3">
<ctl name="INT4_MI2S_RX Audio Mixer MultiMedia10" value="1" />
</path>
@@ -832,6 +882,16 @@
<path name="compress-offload-playback3" />
</path>
+ <path name="compress-offload-playback3 speaker-and-bt-sco">
+ <path name="compress-offload-playback3 bt-sco" />
+ <path name="compress-offload-playback3" />
+ </path>
+
+ <path name="compress-offload-playback3 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback3 bt-sco-wb" />
+ <path name="compress-offload-playback3" />
+ </path>
+
<path name="compress-offload-playback4">
<ctl name="INT4_MI2S_RX Audio Mixer MultiMedia11" value="1" />
</path>
@@ -901,6 +961,16 @@
<path name="compress-offload-playback4" />
</path>
+ <path name="compress-offload-playback4 speaker-and-bt-sco">
+ <path name="compress-offload-playback4 bt-sco" />
+ <path name="compress-offload-playback4" />
+ </path>
+
+ <path name="compress-offload-playback4 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback4 bt-sco-wb" />
+ <path name="compress-offload-playback4" />
+ </path>
+
<path name="compress-offload-playback5">
<ctl name="INT4_MI2S_RX Audio Mixer MultiMedia12" value="1" />
</path>
@@ -969,6 +1039,16 @@
<path name="compress-offload-playback5" />
</path>
+ <path name="compress-offload-playback5 speaker-and-bt-sco">
+ <path name="compress-offload-playback5 bt-sco" />
+ <path name="compress-offload-playback5" />
+ </path>
+
+ <path name="compress-offload-playback5 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback5 bt-sco-wb" />
+ <path name="compress-offload-playback5" />
+ </path>
+
<path name="compress-offload-playback6">
<ctl name="INT4_MI2S_RX Audio Mixer MultiMedia13" value="1" />
</path>
@@ -1037,6 +1117,16 @@
<path name="compress-offload-playback6" />
</path>
+ <path name="compress-offload-playback6 speaker-and-bt-sco">
+ <path name="compress-offload-playback6 bt-sco" />
+ <path name="compress-offload-playback6" />
+ </path>
+
+ <path name="compress-offload-playback6 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback6 bt-sco-wb" />
+ <path name="compress-offload-playback6" />
+ </path>
+
<path name="compress-offload-playback7">
<ctl name="INT4_MI2S_RX Audio Mixer MultiMedia14" value="1" />
</path>
@@ -1105,6 +1195,16 @@
<path name="compress-offload-playback7" />
</path>
+ <path name="compress-offload-playback7 speaker-and-bt-sco">
+ <path name="compress-offload-playback7 bt-sco" />
+ <path name="compress-offload-playback7" />
+ </path>
+
+ <path name="compress-offload-playback7 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback7 bt-sco-wb" />
+ <path name="compress-offload-playback7" />
+ </path>
+
<path name="compress-offload-playback8">
<ctl name="INT4_MI2S_RX Audio Mixer MultiMedia15" value="1" />
</path>
@@ -1173,6 +1273,16 @@
<path name="compress-offload-playback8" />
</path>
+ <path name="compress-offload-playback8 speaker-and-bt-sco">
+ <path name="compress-offload-playback8 bt-sco" />
+ <path name="compress-offload-playback8" />
+ </path>
+
+ <path name="compress-offload-playback8 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback8 bt-sco-wb" />
+ <path name="compress-offload-playback8" />
+ </path>
+
<path name="compress-offload-playback9">
<ctl name="INT4_MI2S_RX Audio Mixer MultiMedia16" value="1" />
</path>
@@ -1241,6 +1351,16 @@
<path name="compress-offload-playback9" />
</path>
+ <path name="compress-offload-playback9 speaker-and-bt-sco">
+ <path name="compress-offload-playback9 bt-sco" />
+ <path name="compress-offload-playback9" />
+ </path>
+
+ <path name="compress-offload-playback9 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback9 bt-sco-wb" />
+ <path name="compress-offload-playback9" />
+ </path>
+
<path name="audio-record">
<ctl name="MultiMedia1 Mixer INT3_MI2S_TX" value="1" />
</path>
diff --git a/configs/sdm660/mixer_paths_wcd9335.xml b/configs/sdm660/mixer_paths_wcd9335.xml
index 964c5bc..8cc6f65 100644
--- a/configs/sdm660/mixer_paths_wcd9335.xml
+++ b/configs/sdm660/mixer_paths_wcd9335.xml
@@ -2817,4 +2817,58 @@
<path name="audio-ull-playback" />
</path>
+ <path name="mmap-playback">
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback headphones">
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback speaker-and-headphones">
+ <path name="mmap-playback" />
+ <path name="mmap-playback headphones" />
+ </path>
+
+ <path name="mmap-playback bt-sco">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback bt-sco-wb">
+ <ctl name="BT SampleRate" value="16000" />
+ <path name="mmap-playback bt-sco" />
+ </path>
+
+ <path name="mmap-playback afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-record">
+ <ctl name="MultiMedia16 Mixer SLIM_0_TX" value="1" />
+ </path>
+
+ <path name="mmap-record bt-sco">
+ <ctl name="MultiMedia16 Mixer SLIM_7_TX" value="1" />
+ </path>
+
+ <path name="mmap-record bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="mmap-record bt-sco" />
+ </path>
+
+ <path name="mmap-record capture-fm">
+ <ctl name="MultiMedia16 Mixer SLIM_8_TX" value="1" />
+ </path>
+
+ <path name="mmap-record usb-headset-mic">
+ <ctl name="MultiMedia16 Mixer USB_AUDIO_TX" value="1" />
+ </path>
</mixer>
diff --git a/configs/sdm660/mixer_paths_wcd9340.xml b/configs/sdm660/mixer_paths_wcd9340.xml
index 2b7f422..213f5c3 100644
--- a/configs/sdm660/mixer_paths_wcd9340.xml
+++ b/configs/sdm660/mixer_paths_wcd9340.xml
@@ -2564,4 +2564,59 @@
<path name="audio-ull-playback" />
</path>
+ <path name="mmap-playback">
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback headphones">
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback speaker-and-headphones">
+ <path name="mmap-playback" />
+ <path name="mmap-playback headphones" />
+ </path>
+
+ <path name="mmap-playback bt-sco">
+ <ctl name="AUX_PCM_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback bt-sco-wb">
+ <ctl name="AUX PCM SampleRate" value="16000" />
+ <path name="mmap-playback bt-sco" />
+ </path>
+
+ <path name="mmap-playback afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-record">
+ <ctl name="MultiMedia16 Mixer SLIM_0_TX" value="1" />
+ </path>
+
+ <path name="mmap-record bt-sco">
+ <ctl name="MultiMedia16 Mixer AUX_PCM_UL_TX" value="1" />
+ </path>
+
+ <path name="mmap-record bt-sco-wb">
+ <ctl name="AUX PCM SampleRate" value="16000" />
+ <path name="mmap-record bt-sco" />
+ </path>
+
+ <path name="mmap-record capture-fm">
+ <ctl name="MultiMedia16 Mixer TERT_MI2S_TX" value="1" />
+ </path>
+
+ <path name="mmap-record usb-headset-mic">
+ <ctl name="MultiMedia16 Mixer USB_AUDIO_TX" value="1" />
+ </path>
+
</mixer>
diff --git a/configs/sdm660/sdm660.mk b/configs/sdm660/sdm660.mk
index bddc56e..8d57a46 100644
--- a/configs/sdm660/sdm660.mk
+++ b/configs/sdm660/sdm660.mk
@@ -234,6 +234,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/sdm660/sound_trigger_mixer_paths_wcd9335.xml b/configs/sdm660/sound_trigger_mixer_paths_wcd9335.xml
index 691b2e3..0efade0 100644
--- a/configs/sdm660/sound_trigger_mixer_paths_wcd9335.xml
+++ b/configs/sdm660/sound_trigger_mixer_paths_wcd9335.xml
@@ -36,6 +36,14 @@
<ctl name="LSM6 Mixer SLIMBUS_5_TX" value="0" />
<ctl name="LSM7 Mixer SLIMBUS_5_TX" value="0" />
<ctl name="LSM8 Mixer SLIMBUS_5_TX" value="0" />
+ <ctl name="LSM1 Mixer SLIMBUS_0_TX" value="0" />
+ <ctl name="LSM2 Mixer SLIMBUS_0_TX" value="0" />
+ <ctl name="LSM3 Mixer SLIMBUS_0_TX" value="0" />
+ <ctl name="LSM4 Mixer SLIMBUS_0_TX" value="0" />
+ <ctl name="LSM5 Mixer SLIMBUS_0_TX" value="0" />
+ <ctl name="LSM6 Mixer SLIMBUS_0_TX" value="0" />
+ <ctl name="LSM7 Mixer SLIMBUS_0_TX" value="0" />
+ <ctl name="LSM8 Mixer SLIMBUS_0_TX" value="0" />
<ctl name="LSM1 Port" value="None" />
<ctl name="LSM2 Port" value="None" />
<ctl name="LSM3 Port" value="None" />
@@ -45,6 +53,7 @@
<ctl name="LSM7 Port" value="None" />
<ctl name="LSM8 Port" value="None" />
<ctl name="SLIMBUS_5_TX LSM Function" value="None" />
+ <ctl name="SLIMBUS_0_TX LSM Function" value="None" />
<ctl name="MADONOFF Switch" value="0" />
<ctl name="MAD Input" value="DMIC1" />
<ctl name="MAD_BROADCAST Switch" value="0" />
@@ -52,10 +61,27 @@
<ctl name="AIF4_MAD Mixer SLIM TX12" value="0" />
<ctl name="AIF4_MAD Mixer SLIM TX13" value="0" />
<ctl name="CPE AFE MAD Enable" value="0"/>
+ <ctl name="AIF1_CAP Mixer SLIM TX8" value="0"/>
+ <ctl name="AIF1_CAP Mixer SLIM TX7" value="0" />
+ <ctl name="AIF1_CAP Mixer SLIM TX6" value="0" />
+ <ctl name="AIF1_CAP Mixer SLIM TX5" value="0"/>
+ <ctl name="SLIM TX5 MUX" value="ZERO" />
+ <ctl name="SLIM TX6 MUX" value="ZERO" />
+ <ctl name="SLIM TX7 MUX" value="ZERO" />
+ <ctl name="SLIM TX8 MUX" 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="CLK MODE" value="EXTERNAL" />
<ctl name="EC BUF MUX INP" value="ZERO" />
<ctl name="ADC MUX1" value="DMIC" />
<ctl name="DMIC MUX1" value="ZERO" />
+ <ctl name="IIR0 INP0 MUX" value="ZERO" />
<path name="listen-voice-wakeup-1">
<ctl name="SLIMBUS_5_TX LSM Function" value="AUDIO" />
@@ -99,11 +125,59 @@
<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" />
<ctl name="AIF4_MAD Mixer SLIM TX13" value="1" />
- <ctl name="MAD Input" value="DMIC2" />
+ <ctl name="MAD Input" value="DMIC3" />
<ctl name="CPE AFE MAD Enable" value="1"/>
</path>
@@ -111,14 +185,14 @@
<ctl name="CLK MODE" value="INTERNAL" />
<ctl name="EC BUF MUX INP" value="DEC1" />
<ctl name="ADC MUX1" value="DMIC" />
- <ctl name="DMIC MUX1" value="DMIC2" />
+ <ctl name="DMIC MUX1" value="DMIC3" />
</path>
<!-- path name used for low bandwidth FTRT codec interface -->
<path name="listen-cpe-handset-mic low-speed-intf">
<ctl name="MADONOFF Switch" value="1" />
<ctl name="AIF4_MAD Mixer SLIM TX12" value="1" />
- <ctl name="MAD Input" value="DMIC2" />
+ <ctl name="MAD Input" value="DMIC3" />
<ctl name="CPE AFE MAD Enable" value="1"/>
</path>
@@ -126,7 +200,43 @@
<ctl name="MAD_BROADCAST Switch" value="1" />
<ctl name="TX13 INP MUX" value="MAD_BRDCST" />
<ctl name="AIF4_MAD Mixer SLIM TX13" value="1" />
- <ctl name="MAD Input" value="DMIC2" />
+ <ctl name="MAD Input" value="DMIC3" />
</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="DMIC3" />
+ <ctl name="IIR0 INP0 MUX" value="DEC7" />
+ </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="DMIC3" />
+ <ctl name="SLIM TX7 MUX" value="DEC7" />
+ <ctl name="ADC MUX7" value="DMIC" />
+ <ctl name="DMIC MUX7" value="DMIC5" />
+ <ctl name="SLIM TX8 MUX" value="DEC8" />
+ <ctl name="ADC MUX8" value="DMIC" />
+ <ctl name="DMIC MUX8" value="DMIC5" />
+ </path>
+
+ <path name="echo-reference">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_RX"/>
+ <ctl name="EC Reference Channels" value="One"/>
+ <ctl name="EC Reference Bit Format" value="S16_LE"/>
+ <ctl name="EC Reference SampleRate" value="48000"/>
+ </path>
+
</mixer>
diff --git a/configs/sdm845/audio_platform_info.xml b/configs/sdm845/audio_platform_info.xml
index abbb294..d53fce8 100644
--- a/configs/sdm845/audio_platform_info.xml
+++ b/configs/sdm845/audio_platform_info.xml
@@ -35,6 +35,7 @@
<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_IN_UNPROCESSED_USB_HEADSET_MIC" acdb_id="133"/>
</acdb_ids>
<bit_width_configs>
<device name="SND_DEVICE_OUT_SPEAKER" bit_width="24"/>
@@ -49,7 +50,6 @@
<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"/>
@@ -67,6 +67,8 @@
<usecase name="USECASE_AUDIO_PLAYBACK_EXT_DISP_SILENCE" type="out" id="27" />
<usecase name="USECASE_AUDIO_PLAYBACK_VOIP" type="out" id="16" />
<usecase name="USECASE_AUDIO_RECORD_VOIP" type="in" id="16" />
+ <usecase name="USECASE_AUDIO_PLAYBACK_MMAP" type="out" id="33" />
+ <usecase name="USECASE_AUDIO_RECORD_MMAP" type="in" id="33" />
</pcm_ids>
<config_params>
<param key="spkr_1_tz_name" value="wsatz.13"/>
@@ -108,6 +110,8 @@
<device name="SND_DEVICE_OUT_VOICE_LINE" backend="headphones" interface="SLIMBUS_6_RX"/>
<device name="SND_DEVICE_OUT_VOICE_TTY_FULL_HEADPHONES" backend="headphones" interface="SLIMBUS_6_RX"/>
<device name="SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES" backend="headphones" interface="SLIMBUS_6_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_BT_SCO" backend="speaker-and-bt-sco" interface="SLIMBUS_0_RX-and-SLIMBUS_7_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB" backend="speaker-and-bt-sco-wb" interface="SLIMBUS_0_RX-and-SLIMBUS_7_RX"/>
</backend_names>
</audio_platform_info>
diff --git a/configs/sdm845/audio_policy_configuration.xml b/configs/sdm845/audio_policy_configuration.xml
index 09a4bb9..d775641 100644
--- a/configs/sdm845/audio_policy_configuration.xml
+++ b/configs/sdm845/audio_policy_configuration.xml
@@ -73,6 +73,10 @@
<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="compress_passthrough" role="source"
flags="AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING">
<profile name="" format="dynamic"
@@ -191,6 +195,11 @@
<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>
@@ -302,15 +311,15 @@
<!-- 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"/>
+ 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"/>
+ 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"/>
+ 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"/>
+ 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"/>
+ 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"
@@ -320,17 +329,19 @@
<route type="mix" sink="BT SCO All"
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
<route type="mix" sink="USB Device Out"
- sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
+ 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="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"
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"/>
<route type="mix" sink="BT A2DP Out"
sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload"/>
<route type="mix" sink="BT A2DP Headphones"
diff --git a/configs/sdm845/mixer_paths_tavil.xml b/configs/sdm845/mixer_paths_tavil.xml
index 41d980b..eb981b5 100644
--- a/configs/sdm845/mixer_paths_tavil.xml
+++ b/configs/sdm845/mixer_paths_tavil.xml
@@ -588,6 +588,16 @@
<path name="deep-buffer-playback" />
</path>
+ <path name="deep-buffer-playback speaker-and-bt-sco">
+ <path name="deep-buffer-playback bt-sco" />
+ <path name="deep-buffer-playback" />
+ </path>
+
+ <path name="deep-buffer-playback speaker-and-bt-sco-wb">
+ <path name="deep-buffer-playback bt-sco-wb" />
+ <path name="deep-buffer-playback" />
+ </path>
+
<path name="low-latency-playback">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia5" value="1" />
</path>
@@ -644,6 +654,16 @@
<ctl name="MultiMedia5_RX QOS Vote" value="Enable" />
</path>
+ <path name="low-latency-playback speaker-and-bt-sco">
+ <path name="low-latency-playback bt-sco" />
+ <path name="low-latency-playback" />
+ </path>
+
+ <path name="low-latency-playback speaker-and-bt-sco-wb">
+ <path name="low-latency-playback bt-sco-wb" />
+ <path name="low-latency-playback" />
+ </path>
+
<path name="audio-ull-playback">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia8" value="1" />
</path>
@@ -691,6 +711,16 @@
<ctl name="USB_AUDIO_RX Audio Mixer MultiMedia8" value="1" />
</path>
+ <path name="audio-ull-playback speaker-and-bt-sco">
+ <path name="audio-ull-playback bt-sco" />
+ <path name="audio-ull-playback" />
+ </path>
+
+ <path name="audio-ull-playback speaker-and-bt-sco-wb">
+ <path name="audio-ull-playback bt-sco-wb" />
+ <path name="audio-ull-playback" />
+ </path>
+
<path name="multi-channel-playback display-port">
<ctl name="DISPLAY_PORT Mixer MultiMedia2" value="1" />
</path>
@@ -763,6 +793,16 @@
<path name="compress-offload-playback" />
</path>
+ <path name="compress-offload-playback speaker-and-bt-sco">
+ <path name="compress-offload-playback bt-sco" />
+ <path name="compress-offload-playback" />
+ </path>
+
+ <path name="compress-offload-playback speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback bt-sco-wb" />
+ <path name="compress-offload-playback" />
+ </path>
+
<path name="compress-offload-playback2">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia7" value="1" />
</path>
@@ -819,6 +859,16 @@
<path name="compress-offload-playback2" />
</path>
+ <path name="compress-offload-playback2 speaker-and-bt-sco">
+ <path name="compress-offload-playback2 bt-sco" />
+ <path name="compress-offload-playback2" />
+ </path>
+
+ <path name="compress-offload-playback2 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback2 bt-sco-wb" />
+ <path name="compress-offload-playback2" />
+ </path>
+
<path name="compress-offload-playback3">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia10" value="1" />
</path>
@@ -875,6 +925,16 @@
<path name="compress-offload-playback3" />
</path>
+ <path name="compress-offload-playback3 speaker-and-bt-sco">
+ <path name="compress-offload-playback3 bt-sco" />
+ <path name="compress-offload-playback3" />
+ </path>
+
+ <path name="compress-offload-playback3 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback3 bt-sco-wb" />
+ <path name="compress-offload-playback3" />
+ </path>
+
<path name="compress-offload-playback4">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia11" value="1" />
</path>
@@ -932,6 +992,16 @@
<path name="compress-offload-playback4" />
</path>
+ <path name="compress-offload-playback4 speaker-and-bt-sco">
+ <path name="compress-offload-playback4 bt-sco" />
+ <path name="compress-offload-playback4" />
+ </path>
+
+ <path name="compress-offload-playback4 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback4 bt-sco-wb" />
+ <path name="compress-offload-playback4" />
+ </path>
+
<path name="compress-offload-playback5">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia12" value="1" />
</path>
@@ -988,6 +1058,16 @@
<path name="compress-offload-playback5" />
</path>
+ <path name="compress-offload-playback5 speaker-and-bt-sco">
+ <path name="compress-offload-playback5 bt-sco" />
+ <path name="compress-offload-playback5" />
+ </path>
+
+ <path name="compress-offload-playback5 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback5 bt-sco-wb" />
+ <path name="compress-offload-playback5" />
+ </path>
+
<path name="compress-offload-playback6">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia13" value="1" />
</path>
@@ -1044,6 +1124,16 @@
<path name="compress-offload-playback6" />
</path>
+ <path name="compress-offload-playback6 speaker-and-bt-sco">
+ <path name="compress-offload-playback6 bt-sco" />
+ <path name="compress-offload-playback6" />
+ </path>
+
+ <path name="compress-offload-playback6 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback6 bt-sco-wb" />
+ <path name="compress-offload-playback6" />
+ </path>
+
<path name="compress-offload-playback7">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia14" value="1" />
</path>
@@ -1100,6 +1190,16 @@
<path name="compress-offload-playback7" />
</path>
+ <path name="compress-offload-playback7 speaker-and-bt-sco">
+ <path name="compress-offload-playback7 bt-sco" />
+ <path name="compress-offload-playback7" />
+ </path>
+
+ <path name="compress-offload-playback7 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback7 bt-sco-wb" />
+ <path name="compress-offload-playback7" />
+ </path>
+
<path name="compress-offload-playback8">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia15" value="1" />
</path>
@@ -1156,6 +1256,16 @@
<path name="compress-offload-playback8" />
</path>
+ <path name="compress-offload-playback8 speaker-and-bt-sco">
+ <path name="compress-offload-playback8 bt-sco" />
+ <path name="compress-offload-playback8" />
+ </path>
+
+ <path name="compress-offload-playback8 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback8 bt-sco-wb" />
+ <path name="compress-offload-playback8" />
+ </path>
+
<path name="compress-offload-playback9">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia16" value="1" />
</path>
@@ -1212,6 +1322,16 @@
<path name="compress-offload-playback9" />
</path>
+ <path name="compress-offload-playback9 speaker-and-bt-sco">
+ <path name="compress-offload-playback9 bt-sco" />
+ <path name="compress-offload-playback9" />
+ </path>
+
+ <path name="compress-offload-playback9 speaker-and-bt-sco-wb">
+ <path name="compress-offload-playback9 bt-sco-wb" />
+ <path name="compress-offload-playback9" />
+ </path>
+
<path name="audio-record">
<ctl name="MultiMedia1 Mixer SLIM_0_TX" value="1" />
</path>
@@ -1830,6 +1950,14 @@
<ctl name="EAR SPKR PA Gain" value="G_6_DB" />
</path>
+ <path name="handset-qrd">
+ <ctl name="SLIM RX0 MUX" value="AIF1_PB" />
+ <ctl name="CDC_IF RX0 MUX" value="SLIM RX0" />
+ <ctl name="SLIM_0_RX Channels" value="One" />
+ <ctl name="RX INT0_1 MIX1 INP0" value="RX0" />
+ <ctl name="EAR PA Gain" value="G_6_DB" />
+ </path>
+
<path name="handset-mic">
<path name="dmic3" />
</path>
@@ -1945,10 +2073,22 @@
<path name="handset" />
</path>
+ <path name="voice-handset-qrd">
+ <path name="handset-qrd" />
+ </path>
+
+ <path name="voice-handset-tmus-qrd">
+ <path name="handset-qrd" />
+ </path>
+
<path name="voice-speaker">
<path name="speaker-mono" />
</path>
+ <path name="voice-speaker-qrd">
+ <path name="speaker-mono-2" />
+ </path>
+
<path name="voice-speaker-2">
<path name="speaker-mono-2" />
</path>
@@ -2285,6 +2425,11 @@
<path name="handset" />
</path>
+ <path name="voice-tty-hco-handset-qrd">
+ <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" />
@@ -2454,4 +2599,83 @@
<path name="audio-ull-playback bt-a2dp" />
<path name="audio-ull-playback" />
</path>
+
+ <path name="mmap-playback">
+ <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback headphones">
+ <ctl name="SLIMBUS_6_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback speaker-and-headphones">
+ <path name="mmap-playback" />
+ <path name="mmap-playback headphones" />
+ </path>
+
+ <path name="mmap-playback bt-sco">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback bt-sco-wb">
+ <ctl name="BT SampleRate" value="16000" />
+ <path name="mmap-playback bt-sco" />
+ </path>
+
+ <path name="mmap-playback afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-buffer-playback hdmi">
+ <ctl name="HDMI Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback speaker-and-hdmi">
+ <path name="mmap-playback hdmi" />
+ <path name="mmap-playback" />
+ </path>
+
+ <path name="mmap-playback speaker-and-display-port">
+ <path name="mmap-playback display-port" />
+ <path name="mmap-playback" />
+ </path>
+
+ <path name="mmap-playback speaker-and-usb-headphones">
+ <path name="mmap-playback usb-headphones" />
+ <path name="mmap-playback" />
+ </path>
+
+ <path name="mmap-record">
+ <ctl name="MultiMedia16 Mixer SLIM_0_TX" value="1" />
+ </path>
+
+ <path name="mmap-record bt-sco">
+ <ctl name="MultiMedia16 Mixer SLIM_7_TX" value="1" />
+ </path>
+
+ <path name="mmap-record bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="mmap-record bt-sco" />
+ </path>
+
+ <path name="mmap-record capture-fm">
+ <ctl name="MultiMedia16 Mixer SLIM_8_TX" value="1" />
+ </path>
+
+ <path name="mmap-record usb-headset-mic">
+ <ctl name="MultiMedia16 Mixer USB_AUDIO_TX" value="1" />
+ </path>
+
</mixer>
diff --git a/configs/sdm845/sdm845.mk b/configs/sdm845/sdm845.mk
index 56f248b..92c22de 100644
--- a/configs/sdm845/sdm845.mk
+++ b/configs/sdm845/sdm845.mk
@@ -212,6 +212,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/sdm845/sound_trigger_mixer_paths_wcd9340.xml b/configs/sdm845/sound_trigger_mixer_paths_wcd9340.xml
index d876fa7..676ae95 100644
--- a/configs/sdm845/sound_trigger_mixer_paths_wcd9340.xml
+++ b/configs/sdm845/sound_trigger_mixer_paths_wcd9340.xml
@@ -47,6 +47,10 @@
<ctl name="SLIMBUS_5_TX LSM Function" value="None" />
<ctl name="MADONOFF Switch" value="0" />
<ctl name="MAD Input" value="DMIC1" />
+ <ctl name="MAD_SEL MUX" value="SPE" />
+ <ctl name="MAD_INP MUX" value="DEC1" />
+ <ctl name="MAD_CPE1 Switch" value="0" />
+ <ctl name="CDC_IF TX13 MUX" value="ZERO" />
<ctl name="MAD_BROADCAST Switch" value="0" />
<ctl name="TX13 INP MUX" value="CDC_DEC_5" />
<ctl name="AIF4_MAD Mixer SLIM TX12" value="0" />
diff --git a/configure.ac b/configure.ac
index ffa5f8c..978d235 100644
--- a/configure.ac
+++ b/configure.ac
@@ -114,13 +114,15 @@
AM_CONDITIONAL([AUDIO_HW_LOOPBACK], [test x$AUDIO_FEATURE_ENABLED_AUDIO_HW_LOOPBACK = xtrue])
AM_CONDITIONAL([AUDIO_PARSER], [test x$AUDIO_FEATURE_ENABLED_PARSER = xtrue])
AM_CONDITIONAL([DTSHD_PARSER], [test x$AUDIO_FEATURE_ENABLED_DTSHD_PARSER = xtrue])
+AM_CONDITIONAL([QAP], [test x$AUDIO_FEATURE_ENABLED_QAP = xtrue])
AC_CONFIG_FILES([ \
Makefile \
hal/Makefile \
post_proc/Makefile \
qahw_api/Makefile \
- qahw_api/test/Makefile
+ qahw_api/test/Makefile \
+ hdmi_in_test/Makefile
])
AC_OUTPUT
diff --git a/hal/Android.mk b/hal/Android.mk
index 7b6afe4..db65517 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,$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter msm8974 msm8226 msm8610 apq8084 msm8994 msm8992 msm8996 msm8998 apq8098_latv sdm845 msmpeafowl,$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM = msm8974
MULTIPLE_HW_VARIANTS_ENABLED := true
@@ -36,6 +36,9 @@
ifneq ($(filter sdm845,$(TARGET_BOARD_PLATFORM)),)
LOCAL_CFLAGS := -DPLATFORM_SDM845
endif
+ifneq ($(filter msmpeafowl,$(TARGET_BOARD_PLATFORM)),)
+ LOCAL_CFLAGS := -DPLATFORM_SDM670
+endif
endif
ifneq ($(filter msm8916 msm8909 msm8952 msm8937 thorium msm8953 msmgold sdm660,$(TARGET_BOARD_PLATFORM)),)
diff --git a/hal/audio_extn/a2dp.c b/hal/audio_extn/a2dp.c
index b96a147..9ebc0f2 100644
--- a/hal/audio_extn/a2dp.c
+++ b/hal/audio_extn/a2dp.c
@@ -55,6 +55,7 @@
#define ENC_MEDIA_FMT_APTX 0x000131ff
#define ENC_MEDIA_FMT_APTX_HD 0x00013200
#define ENC_MEDIA_FMT_SBC 0x00010BF2
+#define ENC_MEDIA_FMT_CELT 0x00013221
#define MEDIA_FMT_AAC_AOT_LC 2
#define MEDIA_FMT_AAC_AOT_SBR 5
#define MEDIA_FMT_AAC_AOT_PS 29
@@ -78,10 +79,29 @@
#define ENCODER_LATENCY_APTX 40
#define ENCODER_LATENCY_APTX_HD 20
#define ENCODER_LATENCY_AAC 70
+//To Do: Fine Tune Encoder CELT latency.
+#define ENCODER_LATENCY_CELT 40
#define DEFAULT_SINK_LATENCY_SBC 140
#define DEFAULT_SINK_LATENCY_APTX 160
#define DEFAULT_SINK_LATENCY_APTX_HD 180
#define DEFAULT_SINK_LATENCY_AAC 180
+//To Do: Fine Tune Default CELT Latency.
+#define DEFAULT_SINK_LATENCY_CELT 180
+
+/*
+ * Below enum values are extended from audio_base.h to
+ * to keep encoder codec type local to bthost_ipc
+ * and audio_hal as these are intended only for handshake
+ * between IPC lib and Audio HAL.
+ */
+typedef enum {
+ ENC_CODEC_TYPE_INVALID = 4294967295u, // 0xFFFFFFFFUL
+ ENC_CODEC_TYPE_AAC = 67108864u, // 0x04000000UL
+ ENC_CODEC_TYPE_SBC = 520093696u, // 0x1F000000UL
+ ENC_CODEC_TYPE_APTX = 536870912u, // 0x20000000UL
+ ENC_CODEC_TYPE_APTX_HD = 553648128u, // 0x21000000UL
+ ENC_CODEC_TYPE_CELT = 603979776u, // 0x24000000UL
+}enc_codec_t;
typedef int (*audio_stream_open_t)(void);
typedef int (*audio_stream_close_t)(void);
@@ -91,7 +111,7 @@
typedef void (*audio_handoff_triggered_t)(void);
typedef void (*clear_a2dpsuspend_flag_t)(void);
typedef void * (*audio_get_codec_config_t)(uint8_t *multicast_status,uint8_t *num_dev,
- audio_format_t *codec_type);
+ enc_codec_t *codec_type);
typedef int (*audio_check_a2dp_ready_t)(void);
typedef uint16_t (*audio_get_a2dp_sink_latency_t)(void);
@@ -120,7 +140,7 @@
audio_check_a2dp_ready_t audio_check_a2dp_ready;
audio_get_a2dp_sink_latency_t audio_get_a2dp_sink_latency;
enum A2DP_STATE bt_state;
- audio_format_t bt_encoder_format;
+ enc_codec_t bt_encoder_format;
uint32_t enc_sampling_rate;
bool a2dp_started;
bool a2dp_suspended;
@@ -177,7 +197,7 @@
* supported channel mapping for stereo is CHANNEL_L and CHANNEL_R
* custom size and reserved are not used(for future enhancement)
*/
-struct custom_enc_cfg_aptx_t
+struct custom_enc_cfg_t
{
uint32_t enc_format;
uint32_t sample_rate;
@@ -187,20 +207,35 @@
uint32_t custom_size;
};
+struct celt_specific_enc_cfg_t
+{
+ uint32_t bit_rate;
+ uint16_t frame_size;
+ uint16_t complexity;
+ uint16_t prediction_mode;
+ uint16_t vbr_flag;
+};
+
+struct celt_enc_cfg_t
+{
+ struct custom_enc_cfg_t custom_cfg;
+ struct celt_specific_enc_cfg_t celt_cfg;
+};
+
/* TODO: Define the following structures only for O using PLATFORM_VERSION */
/* Information about BT SBC encoder configuration
* This data is used between audio HAL module and
* BT IPC library to configure DSP encoder
*/
typedef struct {
- uint32_t subband; /* 4, 8 */
- uint32_t blk_len; /* 4, 8, 12, 16 */
- uint16_t sampling_rate; /*44.1khz,48khz*/
- uint8_t channels; /*0(Mono),1(Dual_mono),2(Stereo),3(JS)*/
- uint8_t alloc; /*0(Loudness),1(SNR)*/
- uint8_t min_bitpool; /* 2 */
- uint8_t max_bitpool; /*53(44.1khz),51 (48khz) */
- uint32_t bitrate; /* 320kbps to 512kbps */
+ uint32_t subband; /* 4, 8 */
+ uint32_t blk_len; /* 4, 8, 12, 16 */
+ uint16_t sampling_rate; /*44.1khz,48khz*/
+ uint8_t channels; /*0(Mono),1(Dual_mono),2(Stereo),3(JS)*/
+ uint8_t alloc; /*0(Loudness),1(SNR)*/
+ uint8_t min_bitpool; /* 2 */
+ uint8_t max_bitpool; /*53(44.1khz),51 (48khz) */
+ uint32_t bitrate; /* 320kbps to 512kbps */
} audio_sbc_encoder_config;
@@ -227,6 +262,20 @@
uint32_t bitrate;
} audio_aac_encoder_config;
+/* Information about BT CELT encoder configuration
+ * This data is used between audio HAL module and
+ * BT IPC library to configure DSP encoder
+ */
+typedef struct {
+ uint32_t sampling_rate; /* 32000 - 48000, 48000 */
+ uint16_t channels; /* 1-Mono, 2-Stereo, 2*/
+ uint16_t frame_size; /* 64-128-256-512, 512 */
+ uint16_t complexity; /* 0-10, 1 */
+ uint16_t prediction_mode; /* 0-1-2, 0 */
+ uint16_t vbr_flag; /* 0-1, 0*/
+ uint32_t bitrate; /*32000 - 1536000, 139500*/
+} audio_celt_encoder_config;
+
/*********** END of DSP configurable structures ********************/
/* API to identify DSP encoder captabilities */
@@ -252,6 +301,10 @@
ALOGD("%s: aac offload supported\n",__func__);
a2dp.is_a2dp_offload_supported = true;
break;
+ } else if (strcmp(tok, "celt") == 0) {
+ ALOGD("%s: celt offload supported\n",__func__);
+ a2dp.is_a2dp_offload_supported = true;
+ break;
}
tok = strtok_r(NULL, "-", &saveptr);
};
@@ -348,7 +401,7 @@
a2dp.a2dp_started = false;
a2dp.a2dp_total_active_session_request = 0;
a2dp.a2dp_suspended = false;
- a2dp.bt_encoder_format = AUDIO_FORMAT_INVALID;
+ a2dp.bt_encoder_format = ENC_CODEC_TYPE_INVALID;
a2dp.enc_sampling_rate = 48000;
a2dp.bt_state = A2DP_STATE_DISCONNECTED;
@@ -372,7 +425,6 @@
is_configured = false;
goto fail;
}
- a2dp.bt_encoder_format = AUDIO_FORMAT_SBC;
memset(&sbc_dsp_cfg, 0x0, sizeof(struct sbc_enc_cfg_t));
sbc_dsp_cfg.enc_format = ENC_MEDIA_FMT_SBC;
sbc_dsp_cfg.num_subbands = sbc_bt_cfg->subband;
@@ -419,6 +471,7 @@
goto fail;
}
is_configured = true;
+ a2dp.bt_encoder_format = ENC_CODEC_TYPE_SBC;
a2dp.enc_sampling_rate = sbc_bt_cfg->sampling_rate;
ALOGV("Successfully updated SBC enc format with samplingrate: %d channelmode:%d",
sbc_dsp_cfg.sample_rate, sbc_dsp_cfg.channel_mode);
@@ -430,7 +483,7 @@
bool configure_aptx_enc_format(audio_aptx_encoder_config *aptx_bt_cfg)
{
struct mixer_ctl *ctl_enc_data = NULL, *ctrl_bit_format = NULL;
- struct custom_enc_cfg_aptx_t aptx_dsp_cfg;
+ struct custom_enc_cfg_t aptx_dsp_cfg;
bool is_configured = false;
int ret = 0;
@@ -443,8 +496,7 @@
is_configured = false;
goto fail;
}
- a2dp.bt_encoder_format = AUDIO_FORMAT_APTX;
- memset(&aptx_dsp_cfg, 0x0, sizeof(struct custom_enc_cfg_aptx_t));
+ memset(&aptx_dsp_cfg, 0x0, sizeof(struct custom_enc_cfg_t));
aptx_dsp_cfg.enc_format = ENC_MEDIA_FMT_APTX;
aptx_dsp_cfg.sample_rate = aptx_bt_cfg->sampling_rate;
aptx_dsp_cfg.num_channels = aptx_bt_cfg->channels;
@@ -459,7 +511,7 @@
break;
}
ret = mixer_ctl_set_array(ctl_enc_data, (void *)&aptx_dsp_cfg,
- sizeof(struct custom_enc_cfg_aptx_t));
+ sizeof(struct custom_enc_cfg_t));
if (ret != 0) {
ALOGE("%s: Failed to set APTX encoder config", __func__);
is_configured = false;
@@ -480,6 +532,7 @@
}
}
is_configured = true;
+ a2dp.bt_encoder_format = ENC_CODEC_TYPE_APTX;
a2dp.enc_sampling_rate = aptx_bt_cfg->sampling_rate;
ALOGV("Successfully updated APTX enc format with samplingrate: %d channels:%d",
aptx_dsp_cfg.sample_rate, aptx_dsp_cfg.num_channels);
@@ -492,7 +545,7 @@
bool configure_aptx_hd_enc_format(audio_aptx_encoder_config *aptx_bt_cfg)
{
struct mixer_ctl *ctl_enc_data = NULL, *ctrl_bit_format = NULL;
- struct custom_enc_cfg_aptx_t aptx_dsp_cfg;
+ struct custom_enc_cfg_t aptx_dsp_cfg;
bool is_configured = false;
int ret = 0;
@@ -506,8 +559,7 @@
goto fail;
}
- a2dp.bt_encoder_format = AUDIO_FORMAT_APTX_HD;
- memset(&aptx_dsp_cfg, 0x0, sizeof(struct custom_enc_cfg_aptx_t));
+ memset(&aptx_dsp_cfg, 0x0, sizeof(struct custom_enc_cfg_t));
aptx_dsp_cfg.enc_format = ENC_MEDIA_FMT_APTX_HD;
aptx_dsp_cfg.sample_rate = aptx_bt_cfg->sampling_rate;
aptx_dsp_cfg.num_channels = aptx_bt_cfg->channels;
@@ -522,7 +574,7 @@
break;
}
ret = mixer_ctl_set_array(ctl_enc_data, (void *)&aptx_dsp_cfg,
- sizeof(struct custom_enc_cfg_aptx_t));
+ sizeof(struct custom_enc_cfg_t));
if (ret != 0) {
ALOGE("%s: Failed to set APTX HD encoder config", __func__);
is_configured = false;
@@ -541,6 +593,7 @@
goto fail;
}
is_configured = true;
+ a2dp.bt_encoder_format = ENC_CODEC_TYPE_APTX_HD;
a2dp.enc_sampling_rate = aptx_bt_cfg->sampling_rate;
ALOGV("Successfully updated APTX HD encformat with samplingrate: %d channels:%d",
aptx_dsp_cfg.sample_rate, aptx_dsp_cfg.num_channels);
@@ -565,7 +618,6 @@
is_configured = false;
goto fail;
}
- a2dp.bt_encoder_format = AUDIO_FORMAT_AAC;
memset(&aac_dsp_cfg, 0x0, sizeof(struct aac_enc_cfg_t));
aac_dsp_cfg.enc_format = ENC_MEDIA_FMT_AAC;
aac_dsp_cfg.bit_rate = aac_bt_cfg->bitrate;
@@ -605,6 +657,7 @@
goto fail;
}
is_configured = true;
+ a2dp.bt_encoder_format = ENC_CODEC_TYPE_AAC;
a2dp.enc_sampling_rate = aac_bt_cfg->sampling_rate;
ALOGV("Successfully updated AAC enc format with samplingrate: %d channels:%d",
aac_dsp_cfg.sample_rate, aac_dsp_cfg.channel_cfg);
@@ -612,11 +665,77 @@
return is_configured;
}
+bool configure_celt_enc_format(audio_celt_encoder_config *celt_bt_cfg)
+{
+ struct mixer_ctl *ctl_enc_data = NULL, *ctrl_bit_format = NULL;
+ struct celt_enc_cfg_t celt_dsp_cfg;
+ bool is_configured = false;
+ int ret = 0;
+ if(celt_bt_cfg == NULL)
+ return false;
+
+ ctl_enc_data = mixer_get_ctl_by_name(a2dp.adev->mixer, MIXER_ENC_CONFIG_BLOCK);
+ if (!ctl_enc_data) {
+ ALOGE(" ERROR a2dp encoder CONFIG data mixer control not identifed");
+ is_configured = false;
+ goto fail;
+ }
+ memset(&celt_dsp_cfg, 0x0, sizeof(struct celt_enc_cfg_t));
+
+ celt_dsp_cfg.custom_cfg.enc_format = ENC_MEDIA_FMT_CELT;
+ celt_dsp_cfg.custom_cfg.sample_rate = celt_bt_cfg->sampling_rate;
+ celt_dsp_cfg.custom_cfg.num_channels = celt_bt_cfg->channels;
+ switch(celt_dsp_cfg.custom_cfg.num_channels) {
+ case 1:
+ celt_dsp_cfg.custom_cfg.channel_mapping[0] = PCM_CHANNEL_C;
+ break;
+ case 2:
+ default:
+ celt_dsp_cfg.custom_cfg.channel_mapping[0] = PCM_CHANNEL_L;
+ celt_dsp_cfg.custom_cfg.channel_mapping[1] = PCM_CHANNEL_R;
+ break;
+ }
+
+ celt_dsp_cfg.custom_cfg.custom_size = sizeof(struct celt_enc_cfg_t);
+
+ celt_dsp_cfg.celt_cfg.frame_size = celt_bt_cfg->frame_size;
+ celt_dsp_cfg.celt_cfg.complexity = celt_bt_cfg->complexity;
+ celt_dsp_cfg.celt_cfg.prediction_mode = celt_bt_cfg->prediction_mode;
+ celt_dsp_cfg.celt_cfg.vbr_flag = celt_bt_cfg->vbr_flag;
+ celt_dsp_cfg.celt_cfg.bit_rate = celt_bt_cfg->bitrate;
+
+ ret = mixer_ctl_set_array(ctl_enc_data, (void *)&celt_dsp_cfg,
+ sizeof(struct celt_enc_cfg_t));
+ if (ret != 0) {
+ ALOGE("%s: Failed to set CELT encoder config", __func__);
+ is_configured = false;
+ goto fail;
+ }
+ ctrl_bit_format = mixer_get_ctl_by_name(a2dp.adev->mixer, MIXER_ENC_BIT_FORMAT);
+ if (!ctrl_bit_format) {
+ ALOGE(" ERROR bit format CONFIG data mixer control not identifed");
+ is_configured = false;
+ goto fail;
+ }
+ ret = mixer_ctl_set_enum_by_string(ctrl_bit_format, "S16_LE");
+ if (ret != 0) {
+ ALOGE("%s: Failed to set bit format to encoder", __func__);
+ is_configured = false;
+ goto fail;
+ }
+ is_configured = true;
+ a2dp.bt_encoder_format = ENC_CODEC_TYPE_CELT;
+ a2dp.enc_sampling_rate = celt_bt_cfg->sampling_rate;
+ ALOGV("Successfully updated CELT encformat with samplingrate: %d channels:%d",
+ celt_dsp_cfg.custom_cfg.sample_rate, celt_dsp_cfg.custom_cfg.num_channels);
+fail:
+ return is_configured;
+}
bool configure_a2dp_encoder_format()
{
void *codec_info = NULL;
uint8_t multi_cast = 0, num_dev = 1;
- audio_format_t codec_type = AUDIO_FORMAT_INVALID;
+ enc_codec_t codec_type = ENC_CODEC_TYPE_INVALID;
bool is_configured = false;
if (!a2dp.audio_get_codec_config) {
@@ -628,26 +747,31 @@
&codec_type);
switch(codec_type) {
- case AUDIO_FORMAT_SBC:
+ case ENC_CODEC_TYPE_SBC:
ALOGD(" Received SBC encoder supported BT device");
is_configured =
configure_sbc_enc_format((audio_sbc_encoder_config *)codec_info);
break;
- case AUDIO_FORMAT_APTX:
+ case ENC_CODEC_TYPE_APTX:
ALOGD(" Received APTX encoder supported BT device");
is_configured =
configure_aptx_enc_format((audio_aptx_encoder_config *)codec_info);
break;
- case AUDIO_FORMAT_APTX_HD:
+ case ENC_CODEC_TYPE_APTX_HD:
ALOGD(" Received APTX HD encoder supported BT device");
is_configured =
configure_aptx_hd_enc_format((audio_aptx_encoder_config *)codec_info);
break;
- case AUDIO_FORMAT_AAC:
+ case ENC_CODEC_TYPE_AAC:
ALOGD(" Received AAC encoder supported BT device");
is_configured =
configure_aac_enc_format((audio_aac_encoder_config *)codec_info);
break;
+ case ENC_CODEC_TYPE_CELT:
+ ALOGD(" Received CELT encoder supported BT device");
+ is_configured =
+ configure_celt_enc_format((audio_celt_encoder_config *)codec_info);
+ break;
default:
ALOGD(" Received Unsupported encoder formar");
is_configured = false;
@@ -805,7 +929,8 @@
a2dp.a2dp_suspended = true;
list_for_each(node, &a2dp.adev->usecase_list) {
uc_info = node_to_item(node, struct audio_usecase, list);
- if (uc_info->type == PCM_PLAYBACK) {
+ if (uc_info->type == PCM_PLAYBACK &&
+ (uc_info->stream.out->devices & AUDIO_DEVICE_OUT_ALL_A2DP)) {
pthread_mutex_unlock(&a2dp.adev->lock);
check_a2dp_restore(a2dp.adev, uc_info->stream.out, false);
pthread_mutex_lock(&a2dp.adev->lock);
@@ -844,7 +969,8 @@
}
list_for_each(node, &a2dp.adev->usecase_list) {
uc_info = node_to_item(node, struct audio_usecase, list);
- if (uc_info->type == PCM_PLAYBACK) {
+ if (uc_info->type == PCM_PLAYBACK &&
+ (uc_info->stream.out->devices & AUDIO_DEVICE_OUT_ALL_A2DP)) {
pthread_mutex_unlock(&a2dp.adev->lock);
check_a2dp_restore(a2dp.adev, uc_info->stream.out, true);
pthread_mutex_lock(&a2dp.adev->lock);
@@ -874,7 +1000,7 @@
void audio_extn_a2dp_get_apptype_params(uint32_t *sample_rate,
uint32_t *bit_width)
{
- if(a2dp.bt_encoder_format == AUDIO_FORMAT_APTX_HD)
+ if(a2dp.bt_encoder_format == ENC_CODEC_TYPE_APTX_HD)
*bit_width = 24;
else
*bit_width = 16;
@@ -908,10 +1034,11 @@
a2dp.bt_state = A2DP_STATE_DISCONNECTED;
a2dp.a2dp_total_active_session_request = 0;
a2dp.a2dp_suspended = false;
- a2dp.bt_encoder_format = AUDIO_FORMAT_INVALID;
+ a2dp.bt_encoder_format = ENC_CODEC_TYPE_INVALID;
a2dp.enc_sampling_rate = 48000;
a2dp.is_a2dp_offload_supported = false;
a2dp.is_handoff_in_progress = false;
+ reset_a2dp_enc_config_params();
update_offload_codec_capabilities();
}
@@ -919,14 +1046,14 @@
{
uint32_t latency = 0;
int avsync_runtime_prop = 0;
- int sbc_offset = 0, aptx_offset = 0, aptxhd_offset = 0, aac_offset = 0;
+ int sbc_offset = 0, aptx_offset = 0, aptxhd_offset = 0, aac_offset = 0, celt_offset = 0;
char value[PROPERTY_VALUE_MAX];
memset(value, '\0', sizeof(char)*PROPERTY_VALUE_MAX);
avsync_runtime_prop = property_get("vendor.audio.a2dp.codec.latency", value, NULL);
if (avsync_runtime_prop > 0) {
- if (sscanf(value, "%d/%d/%d/%d",
- &sbc_offset, &aptx_offset, &aptxhd_offset, &aac_offset) != 4) {
+ if (sscanf(value, "%d/%d/%d/%d/%d",
+ &sbc_offset, &aptx_offset, &aptxhd_offset, &aac_offset, &celt_offset) != 5) {
ALOGI("Failed to parse avsync offset params from '%s'.", value);
avsync_runtime_prop = 0;
}
@@ -938,22 +1065,26 @@
}
switch(a2dp.bt_encoder_format) {
- case AUDIO_FORMAT_SBC:
+ case ENC_CODEC_TYPE_SBC:
latency = (avsync_runtime_prop > 0) ? sbc_offset : ENCODER_LATENCY_SBC;
latency += (slatency <= 0) ? DEFAULT_SINK_LATENCY_SBC : slatency;
break;
- case AUDIO_FORMAT_APTX:
+ case ENC_CODEC_TYPE_APTX:
latency = (avsync_runtime_prop > 0) ? aptx_offset : ENCODER_LATENCY_APTX;
latency += (slatency <= 0) ? DEFAULT_SINK_LATENCY_APTX : slatency;
break;
- case AUDIO_FORMAT_APTX_HD:
+ case ENC_CODEC_TYPE_APTX_HD:
latency = (avsync_runtime_prop > 0) ? aptxhd_offset : ENCODER_LATENCY_APTX_HD;
latency += (slatency <= 0) ? DEFAULT_SINK_LATENCY_APTX_HD : slatency;
break;
- case AUDIO_FORMAT_AAC:
+ case ENC_CODEC_TYPE_AAC:
latency = (avsync_runtime_prop > 0) ? aac_offset : ENCODER_LATENCY_AAC;
latency += (slatency <= 0) ? DEFAULT_SINK_LATENCY_AAC : slatency;
break;
+ case ENC_CODEC_TYPE_CELT:
+ latency = (avsync_runtime_prop > 0) ? celt_offset : ENCODER_LATENCY_CELT;
+ latency += (slatency <= 0) ? DEFAULT_SINK_LATENCY_CELT : slatency;
+ break;
default:
latency = 200;
break;
diff --git a/hal/audio_extn/audio_defs.h b/hal/audio_extn/audio_defs.h
index dfe8c61..4e5f4d8 100644
--- a/hal/audio_extn/audio_defs.h
+++ b/hal/audio_extn/audio_defs.h
@@ -236,6 +236,17 @@
struct audio_device_cfg_param dev_cfg_params;
};
+typedef struct mix_matrix_params {
+ uint16_t num_output_channels;
+ uint16_t num_input_channels;
+ uint8_t has_output_channel_map;
+ uint32_t output_channel_map[AUDIO_CHANNEL_COUNT_MAX];
+ uint8_t has_input_channel_map;
+ uint32_t input_channel_map[AUDIO_CHANNEL_COUNT_MAX];
+ uint8_t has_mixer_coeffs;
+ float mixer_coeffs[AUDIO_CHANNEL_COUNT_MAX][AUDIO_CHANNEL_COUNT_MAX];
+} mix_matrix_params_t;
+
typedef union {
struct source_tracking_param st_params;
struct sound_focus_param sf_params;
@@ -248,6 +259,7 @@
struct audio_adsp_event adsp_event_params;
struct audio_out_channel_map_param channel_map_param;
struct audio_device_cfg_param device_cfg;
+ struct mix_matrix_params mm_params;
} audio_extn_param_payload;
typedef enum {
@@ -264,7 +276,11 @@
AUDIO_EXTN_PARAM_ADSP_STREAM_CMD,
/* param to set input channel map for playback stream */
AUDIO_EXTN_PARAM_OUT_CHANNEL_MAP,
- AUDIO_EXTN_PARAM_DEVICE_CONFIG
+ AUDIO_EXTN_PARAM_DEVICE_CONFIG,
+ /* Pan/scale params to be set on ASM */
+ AUDIO_EXTN_PARAM_OUT_MIX_MATRIX_PARAMS,
+ /* Downmix params to be set on ADM */
+ AUDIO_EXTN_PARAM_CH_MIX_MATRIX_PARAMS
} audio_extn_param_id;
#endif /* AUDIO_DEFS_H */
diff --git a/hal/audio_extn/audio_extn.c b/hal/audio_extn/audio_extn.c
index 804027b..84de66f 100644
--- a/hal/audio_extn/audio_extn.c
+++ b/hal/audio_extn/audio_extn.c
@@ -1161,6 +1161,7 @@
"perf_lock_acq");
if (perf_lock_acq == NULL) {
ALOGE("%s: Perf lock Acquire NULL \n", __func__);
+ dlclose(qcopt_handle);
ret = -EINVAL;
goto err;
}
@@ -1168,6 +1169,7 @@
"perf_lock_rel");
if (perf_lock_rel == NULL) {
ALOGE("%s: Perf lock Release NULL \n", __func__);
+ dlclose(qcopt_handle);
ret = -EINVAL;
goto err;
}
@@ -1377,6 +1379,14 @@
ret = audio_extn_utils_set_channel_map(out,
(struct audio_out_channel_map_param *)(payload));
break;
+ case AUDIO_EXTN_PARAM_OUT_MIX_MATRIX_PARAMS:
+ ret = audio_extn_utils_set_pan_scale_params(out,
+ (struct mix_matrix_params *)(payload));
+ break;
+ case AUDIO_EXTN_PARAM_CH_MIX_MATRIX_PARAMS:
+ ret = audio_extn_utils_set_downmix_params(out,
+ (struct mix_matrix_params *)(payload));
+ break;
default:
ALOGE("%s:: unsupported param_id %d", __func__, param_id);
break;
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index c2a5484..c30f982 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -96,11 +96,27 @@
#endif
#ifndef AUDIO_FORMAT_AC4
-#define AUDIO_FORMAT_AC4 0x23000000UL
+#define AUDIO_FORMAT_AC4 0x22000000UL
+#endif
+
+#ifndef AUDIO_OUTPUT_FLAG_MAIN
+#define AUDIO_OUTPUT_FLAG_MAIN 0x8000000
+#endif
+
+#ifndef AUDIO_OUTPUT_FLAG_ASSOCIATED
+#define AUDIO_OUTPUT_FLAG_ASSOCIATED 0x10000000
#endif
#ifndef AUDIO_OUTPUT_FLAG_TIMESTAMP
-#define AUDIO_OUTPUT_FLAG_TIMESTAMP 0x10000
+#define AUDIO_OUTPUT_FLAG_TIMESTAMP 0x20000000
+#endif
+
+#ifndef AUDIO_OUTPUT_FLAG_BD
+#define AUDIO_OUTPUT_FLAG_BD 0x40000000
+#endif
+
+#ifndef AUDIO_OUTPUT_FLAG_INTERACTIVE
+#define AUDIO_OUTPUT_FLAG_INTERACTIVE 0x80000000
#endif
#ifndef COMPRESS_METADATA_NEEDED
@@ -500,6 +516,8 @@
#define audio_extn_passthru_init(a) do {} while(0)
#define audio_extn_passthru_should_standby(o) (1)
#define audio_extn_passthru_get_channel_count(out) (0)
+#define audio_extn_passthru_update_dts_stream_configuration(out, buffer, bytes) (-ENOSYS)
+#define audio_extn_passthru_is_direct_passthrough(out) (0)
#else
bool audio_extn_passthru_is_convert_supported(struct audio_device *adev,
struct stream_out *out);
@@ -524,6 +542,9 @@
void audio_extn_passthru_init(struct audio_device *adev);
bool audio_extn_passthru_should_standby(struct stream_out *out);
int audio_extn_passthru_get_channel_count(struct stream_out *out);
+int audio_extn_passthru_update_dts_stream_configuration(struct stream_out *out,
+ const void *buffer, size_t bytes);
+bool audio_extn_passthru_is_direct_passthrough(struct stream_out *out);
#endif
#ifndef HFP_ENABLED
@@ -599,6 +620,7 @@
struct audio_device *adev,
struct audio_usecase *usecase);
int audio_extn_utils_get_snd_card_num();
+bool audio_extn_is_dsp_bit_width_enforce_mode_supported(audio_output_flags_t flags);
#ifdef DS2_DOLBY_DAP_ENABLED
#define LIB_DS2_DAP_HAL "vendor/lib/libhwdaphal.so"
@@ -892,6 +914,12 @@
int audio_extn_utils_set_channel_map(
struct stream_out *out,
struct audio_out_channel_map_param *channel_map_param);
+int audio_extn_utils_set_pan_scale_params(
+ struct stream_out *out,
+ struct mix_matrix_params *mm_params);
+int audio_extn_utils_set_downmix_params(
+ struct stream_out *out,
+ struct mix_matrix_params *mm_params);
#ifdef AUDIO_HW_LOOPBACK_ENABLED
/* API to create audio patch */
int audio_extn_hw_loopback_create_audio_patch(struct audio_hw_device *dev,
diff --git a/hal/audio_extn/hfp.c b/hal/audio_extn/hfp.c
index 685078b..748562a 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)
+#elif defined (PLATFORM_MSM8998) || defined (PLATFORM_MSMFALCON) || defined (PLATFORM_SDM845) || defined (PLATFORM_SDM670)
#define HFP_RX_VOLUME "SLIMBUS_7 LOOPBACK Volume"
#else
#define HFP_RX_VOLUME "Internal HFP RX Volume"
diff --git a/hal/audio_extn/hw_loopback.c b/hal/audio_extn/hw_loopback.c
index 6da9313..7c846d9 100644
--- a/hal/audio_extn/hw_loopback.c
+++ b/hal/audio_extn/hw_loopback.c
@@ -41,7 +41,10 @@
#define PATCH_HANDLE_INVALID 0xFFFF
#define MAX_SOURCE_PORTS_PER_PATCH 1
#define MAX_SINK_PORTS_PER_PATCH 1
+#define HW_LOOPBACK_RX_VOLUME "Trans Loopback RX Volume"
+#define HW_LOOPBACK_RX_UNITY_GAIN 0x2000
+#include <math.h>
#include <stdlib.h>
#include <pthread.h>
#include <errno.h>
@@ -59,7 +62,8 @@
#include <system/thread_defs.h>
#include <cutils/sched_policy.h>
#include "audio_extn.h"
-#include "sound/compress_params.h"
+#include <sound/compress_params.h>
+#include <sound/compress_offload.h>
#include <system/audio.h>
/*
@@ -131,6 +135,34 @@
}
}
+/* Set loopback volume : for mute implementation */
+static int hw_loopback_set_volume(struct audio_device *adev, int value)
+{
+ int32_t ret = 0;
+ struct mixer_ctl *ctl;
+ char mixer_ctl_name[MAX_LENGTH_MIXER_CONTROL_IN_INT];
+ snprintf(mixer_ctl_name, sizeof(mixer_ctl_name),
+ "Transcode Loopback Rx Volume");
+
+ ALOGD("%s: (%d)\n", __func__, value);
+
+ ALOGD("%s: Setting HW loopback volume to %d \n", __func__, value);
+ ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
+ if (!ctl) {
+ ALOGE("%s: Could not get ctl for mixer cmd - %s",
+ __func__, mixer_ctl_name);
+ return -EINVAL;
+ }
+
+ if(mixer_ctl_set_value(ctl, 0, value) < 0) {
+ ALOGE("%s: Couldn't set HW Loopback Volume: [%d]", __func__, value);
+ return -EINVAL;
+ }
+
+ ALOGV("%s: exit", __func__);
+ return ret;
+}
+
/* Initialize patch database */
int init_patch_database(patch_db_t* patch_db)
{
@@ -147,7 +179,8 @@
{
if((sink_device_mask & AUDIO_DEVICE_OUT_SPEAKER) ||
(sink_device_mask & AUDIO_DEVICE_OUT_WIRED_HEADSET) ||
- (sink_device_mask & AUDIO_DEVICE_OUT_WIRED_HEADPHONE)) {
+ (sink_device_mask & AUDIO_DEVICE_OUT_WIRED_HEADPHONE) ||
+ (sink_device_mask & AUDIO_DEVICE_OUT_LINE)) {
return true;
}
return false;
@@ -270,7 +303,7 @@
adev->active_input = get_next_active_input(adev);
- if (audio_extn_ip_hdlr_intf_supported(source_patch_config->format) && inout->ip_hdlr_handle) {
+ if (inout->ip_hdlr_handle) {
ret = audio_extn_ip_hdlr_intf_close(inout->ip_hdlr_handle, true, inout);
if (ret < 0)
ALOGE("%s: audio_extn_ip_hdlr_intf_close failed %d",__func__, ret);
@@ -284,8 +317,7 @@
inout->adsp_hdlr_stream_handle = NULL;
}
- if (audio_extn_ip_hdlr_intf_supported(source_patch_config->format) &&
- inout->ip_hdlr_handle) {
+ if (inout->ip_hdlr_handle) {
audio_extn_ip_hdlr_intf_deinit(inout->ip_hdlr_handle);
inout->ip_hdlr_handle = NULL;
}
@@ -306,6 +338,27 @@
return 0;
}
+#if defined SNDRV_COMPRESS_LATENCY_MODE
+static void transcode_loopback_util_set_latency_mode(
+ loopback_patch_t *active_loopback_patch,
+ uint32_t latency_mode)
+{
+ struct snd_compr_metadata metadata;
+
+ metadata.key = SNDRV_COMPRESS_LATENCY_MODE;
+ metadata.value[0] = latency_mode;
+ ALOGV("%s: Setting latency mode %d",__func__, latency_mode);
+ compress_set_metadata(active_loopback_patch->source_stream,&metadata);
+}
+#else
+static void transcode_loopback_util_set_latency_mode(
+ loopback_patch_t *active_loopback_patch __unused,
+ uint32_t latency_mode __unused)
+{
+ ALOGD("%s:: Latency mode configuration not supported", __func__);
+}
+#endif
+
/* Create a loopback session based on active loopback patch selected */
int create_loopback_session(loopback_patch_t *active_loopback_patch)
{
@@ -323,6 +376,7 @@
struct stream_inout *inout = &active_loopback_patch->patch_stream;
struct adsp_hdlr_stream_cfg hdlr_stream_cfg;
struct stream_in loopback_source_stream;
+ char prop_value[PROPERTY_VALUE_MAX] = {0};
ALOGD("%s: Create loopback session begin", __func__);
@@ -381,8 +435,9 @@
inout->adsp_hdlr_stream_handle = NULL;
goto exit;
}
- if (audio_extn_ip_hdlr_intf_supported(source_patch_config->format)) {
- ret = audio_extn_ip_hdlr_intf_init(&inout->ip_hdlr_handle, NULL, NULL);
+ if (audio_extn_ip_hdlr_intf_supported(source_patch_config->format,false, true)) {
+ ret = audio_extn_ip_hdlr_intf_init(&inout->ip_hdlr_handle, NULL, NULL, adev,
+ USECASE_AUDIO_TRANSCODE_LOOPBACK);
if (ret < 0) {
ALOGE("%s: audio_extn_ip_hdlr_intf_init failed %d", __func__, ret);
inout->ip_hdlr_handle = NULL;
@@ -434,6 +489,14 @@
sink_config.fragments = 1;
sink_config.codec = &codec;
+ /* Do not alter the location of sending latency mode property */
+ /* Mode set on any stream but before both streams are open */
+ if(property_get("audio.transcode.latency.mode", prop_value, "")) {
+ uint32_t latency_mode = atoi(prop_value);
+ transcode_loopback_util_set_latency_mode(active_loopback_patch,
+ latency_mode);
+ }
+
/* Open compress stream in playback path */
active_loopback_patch->sink_stream = compress_open(adev->snd_card,
pcm_dev_asm_rx_id, COMPRESS_IN, &sink_config);
@@ -467,7 +530,7 @@
ret = -EINVAL;
goto exit;
}
- if (audio_extn_ip_hdlr_intf_supported(source_patch_config->format) && inout->ip_hdlr_handle) {
+ if (inout->ip_hdlr_handle) {
ret = audio_extn_ip_hdlr_intf_open(inout->ip_hdlr_handle, true, inout,
USECASE_AUDIO_TRANSCODE_LOOPBACK);
if (ret < 0) {
@@ -662,8 +725,7 @@
struct audio_port *port_in)
{
int status = 0, n=0, patch_num=-1;
- loopback_patch_t *active_loopback_patch = NULL;
- port_info_t *port_info = NULL;
+ port_info_t port_info;
struct audio_port_config *port_out=NULL;
ALOGV("%s %d", __func__, __LINE__);
@@ -675,10 +737,10 @@
pthread_mutex_lock(&audio_loopback_mod->lock);
- port_info->id = port_in->id;
- port_info->role = port_in->role; /* sink or source */
- port_info->type = port_in->type; /* device, mix ... */
- port_out = get_port_from_patch_db(port_info, &audio_loopback_mod->patch_db,
+ port_info.id = port_in->id;
+ port_info.role = port_in->role; /* sink or source */
+ port_info.type = port_in->type; /* device, mix ... */
+ port_out = get_port_from_patch_db(&port_info, &audio_loopback_mod->patch_db,
&patch_num);
if (port_out == NULL) {
ALOGE("%s, Unable to find a valid matching port in patch \
@@ -709,40 +771,64 @@
const struct audio_port_config *config)
{
int status = 0, n=0, patch_num=-1;
- loopback_patch_t *active_loopback_patch = NULL;
- port_info_t *port_info = NULL;
+ port_info_t port_info;
struct audio_port_config *port_out=NULL;
+ struct audio_device *adev = audio_loopback_mod->adev;
+ int loopback_gain = HW_LOOPBACK_RX_UNITY_GAIN;
+
ALOGV("%s %d", __func__, __LINE__);
if ((audio_loopback_mod == NULL) || (dev == NULL)) {
ALOGE("%s, Invalid device", __func__);
- status = -1;
+ status = -EINVAL;
return status;
}
pthread_mutex_lock(&audio_loopback_mod->lock);
- port_info->id = config->id;
- port_info->role = config->role; /* sink or source */
- port_info->type = config->type; /* device, mix */
- port_out = get_port_from_patch_db(port_info, &audio_loopback_mod->patch_db
+ port_info.id = config->id;
+ port_info.role = config->role; /* sink or source */
+ port_info.type = config->type; /* device, mix */
+ port_out = get_port_from_patch_db(&port_info, &audio_loopback_mod->patch_db
, &patch_num);
if (port_out == NULL) {
ALOGE("%s, Unable to find a valid matching port in patch \
database,exiting", __func__);
- status = -1;
- return status;
+ status = -EINVAL;
+ goto exit_set_port_config;
}
- port_out->config_mask = config->config_mask;
- port_out->channel_mask = config->channel_mask;
- port_out->format = config->format;
- port_out->gain = config->gain;
- port_out->sample_rate = config->sample_rate;
+ port_out->config_mask |= config->config_mask;
+ if(config->config_mask & AUDIO_PORT_CONFIG_CHANNEL_MASK)
+ port_out->channel_mask = config->channel_mask;
+ if(config->config_mask & AUDIO_PORT_CONFIG_FORMAT)
+ port_out->format = config->format;
+ if(config->config_mask & AUDIO_PORT_CONFIG_GAIN)
+ port_out->gain = config->gain;
+ if(config->config_mask & AUDIO_PORT_CONFIG_SAMPLE_RATE)
+ port_out->sample_rate = config->sample_rate;
+
+ /* Convert gain in millibels to ratio and convert to Q13 */
+ loopback_gain = pow(10, (float)((float)port_out->gain.values[0]/2000)) *
+ (1 << 13);
+ ALOGV("%s, Port config gain_in_mbells: %d, gain_in_q13 : %d", __func__,
+ port_out->gain.values[0], loopback_gain);
+ if((port_out->config_mask & AUDIO_PORT_CONFIG_GAIN) &&
+ port_out->gain.mode == AUDIO_GAIN_MODE_JOINT ) {
+ status = hw_loopback_set_volume(adev, loopback_gain);
+ if (status) {
+ ALOGE("%s, Error setting loopback gain config: status %d",
+ __func__, status);
+ }
+ } else {
+ ALOGE("%s, Unsupported port config ,exiting", __func__);
+ status = -EINVAL;
+ }
/* Currently, port config is not used for anything,
need to restart session */
+exit_set_port_config:
pthread_mutex_unlock(&audio_loopback_mod->lock);
return status;
}
diff --git a/hal/audio_extn/ip_hdlr_intf.c b/hal/audio_extn/ip_hdlr_intf.c
index 21d4e07..a94e6de 100644
--- a/hal/audio_extn/ip_hdlr_intf.c
+++ b/hal/audio_extn/ip_hdlr_intf.c
@@ -70,6 +70,7 @@
int (*deinit)(void *handle);
int (*open)(void *handle, bool is_dsp_decode, void *aud_sess_handle);
int (*shm_info)(void *handle, int *fd);
+ int (*get_lib_fd)(void *handle, int *lib_fd);
int (*close)(void *handle);
int (*event)(void *handle, void *payload);
int (*reg_cb)(void *handle, void *ack_cb, void *fail_cb);
@@ -116,12 +117,20 @@
uint8_t payload[0];
};
-bool audio_extn_ip_hdlr_intf_supported(audio_format_t format)
+bool audio_extn_ip_hdlr_intf_supported(audio_format_t format,
+ bool is_direct_passthrough,
+ bool is_transcode_loopback)
{
- if (((format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_DOLBY_TRUEHD) ||
- ((!property_get_bool("audio.offload.passthrough", false)) &&
- (((format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_E_AC3) ||
- ((format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_AC3))))
+
+ if ((format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_DOLBY_TRUEHD)
+ return true;
+ else if (!is_direct_passthrough && !audio_extn_qaf_is_enabled() &&
+ (((format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_E_AC3) ||
+ ((format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_AC3)))
+ return true;
+ else if (is_transcode_loopback &&
+ (((format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_E_AC3) ||
+ ((format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_AC3)))
return true;
else
return false;
@@ -416,9 +425,13 @@
return ret;
}
-int audio_extn_ip_hdlr_intf_init(void **handle, char *lib_path, void **lib_handle)
+int audio_extn_ip_hdlr_intf_init(void **handle, char *lib_path, void **lib_handle,
+ struct audio_device *dev, audio_usecase_t usecase)
{
- int ret = 0;
+ int ret = 0, pcm_device_id;
+ int lib_fd;
+ struct mixer_ctl *ctl = NULL;
+ char mixer_ctl_name[MIXER_PATH_MAX_LENGTH] = {0};
if (!ip_hdlr) {
ip_hdlr = (struct ip_hdlr_intf *)calloc(1, sizeof(struct ip_hdlr_intf));
@@ -444,11 +457,13 @@
void *fail_cb))dlsym(ip_hdlr->lib_hdl, "audio_ip_hdlr_reg_cb");
ip_hdlr->shm_info =(int (*)(void *handle, int *fd))dlsym(ip_hdlr->lib_hdl,
"audio_ip_hdlr_shm_info");
+ ip_hdlr->get_lib_fd =(int (*)(void *handle, int *fd))dlsym(ip_hdlr->lib_hdl,
+ "audio_ip_hdlr_lib_fd");
ip_hdlr->event =(int (*)(void *handle, void *payload))dlsym(ip_hdlr->lib_hdl,
"audio_ip_hdlr_event");
if (!ip_hdlr->init || !ip_hdlr->deinit || !ip_hdlr->open ||
!ip_hdlr->close || !ip_hdlr->reg_cb || !ip_hdlr->shm_info ||
- !ip_hdlr->event) {
+ !ip_hdlr->event || !ip_hdlr->get_lib_fd) {
ALOGE("%s: failed to get symbols", __func__);
ret = -EINVAL;
goto dlclose;
@@ -462,6 +477,32 @@
ret = -EINVAL;
goto dlclose;
}
+ if (!lib_path) {
+ ip_hdlr->get_lib_fd(*handle, &lib_fd);
+
+ pcm_device_id = platform_get_pcm_device_id(usecase, PCM_PLAYBACK);
+ 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);
+ goto dlclose;
+ }
+ ALOGV("%s: fd = %d pcm_id = %d", __func__, lib_fd, pcm_device_id);
+
+ ctl = mixer_get_ctl_by_name(dev->mixer, mixer_ctl_name);
+ if (!ctl) {
+ ALOGE("%s:[%d] Could not get ctl for mixer cmd - %s", __func__,
+ ip_hdlr->ref_cnt, mixer_ctl_name);
+ ret = -EINVAL;
+ goto dlclose;
+ }
+ ret = mixer_ctl_set_array(ctl, &lib_fd, sizeof(lib_fd));
+ if (ret < 0) {
+ ALOGE("%s:[%d] Could not set ctl for mixer cmd - %s, ret %d", __func__, ip_hdlr->ref_cnt,
+ mixer_ctl_name, ret);
+ goto dlclose;
+ }
+ }
ip_hdlr->ref_cnt++;
ALOGD("%s:[%d] init done", __func__, ip_hdlr->ref_cnt);
diff --git a/hal/audio_extn/ip_hdlr_intf.h b/hal/audio_extn/ip_hdlr_intf.h
index e8a9166..6040620 100644
--- a/hal/audio_extn/ip_hdlr_intf.h
+++ b/hal/audio_extn/ip_hdlr_intf.h
@@ -35,17 +35,20 @@
int audio_extn_ip_hdlr_intf_open(void *handle, bool is_dsp_decode, void *aud_sess_handle,
audio_usecase_t usecase);
int audio_extn_ip_hdlr_intf_close(void *handle, bool is_dsp_decode, void *aud_sess_handle);
-int audio_extn_ip_hdlr_intf_init(void **handle, char *lib_path, void **lib_handle);
+int audio_extn_ip_hdlr_intf_init(void **handle, char *lib_path, void **lib_handle,
+ struct audio_device *dev, audio_usecase_t usecase);
int audio_extn_ip_hdlr_intf_deinit(void *handle);
-bool audio_extn_ip_hdlr_intf_supported(audio_format_t format);
+bool audio_extn_ip_hdlr_intf_supported(audio_format_t format,
+ bool is_direct_passthru,
+ bool is_transcode_loopback);
#else
#define audio_extn_ip_hdlr_intf_open(handle, is_dsp_decode, aud_sess_handle, usecase) (0)
-#define audio_extn_ip_hdlr_intf_close(handle, is_dsp_decode, aud_sess_handle) (0)
-#define audio_extn_ip_hdlr_intf_init(handle, lib_path, lib_handle) (0)
+#define audio_extn_ip_hdlr_intf_close(handle, is_dsp_decode, aud_sess_handle) (0)
+#define audio_extn_ip_hdlr_intf_init(handle, lib_path, lib_handlei, adev, usecase) (0)
#define audio_extn_ip_hdlr_intf_deinit(handle) (0)
-#define audio_extn_ip_hdlr_intf_supported(format) (0)
+#define audio_extn_ip_hdlr_intf_supported(format, is_direct_passthru, is_loopback) (0)
#endif
diff --git a/hal/audio_extn/keep_alive.c b/hal/audio_extn/keep_alive.c
index 8bd1da1..3e9a91c 100644
--- a/hal/audio_extn/keep_alive.c
+++ b/hal/audio_extn/keep_alive.c
@@ -49,6 +49,7 @@
STATE_DEINIT = -1,
STATE_IDLE,
STATE_ACTIVE,
+ STATE_DISABLED,
} state_t;
typedef enum {
@@ -93,6 +94,13 @@
ka.userdata = adev;
ka.state = STATE_IDLE;
ka.pcm = NULL;
+
+ if (property_get_bool("audio.keep_alive.disabled", false)) {
+ ALOGE("keep alive disabled");
+ ka.state = STATE_DISABLED;
+ return;
+ }
+
pthread_mutex_init(&ka.lock, (const pthread_mutexattr_t *) NULL);
pthread_cond_init(&ka.cond, (const pthread_condattr_t *) NULL);
pthread_cond_init(&ka.wake_up_cond, (const pthread_condattr_t *) NULL);
@@ -108,7 +116,7 @@
static void send_cmd_l(request_t r)
{
- if (ka.state == STATE_DEINIT)
+ if (ka.state == STATE_DEINIT || ka.state == STATE_DISABLED)
return;
struct keep_alive_cmd *cmd =
@@ -193,6 +201,9 @@
struct audio_usecase *usecase;
int32_t sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
+ if (ka.state == STATE_DISABLED)
+ return;
+
pthread_mutex_lock(&ka.lock);
if (ka.state == STATE_DEINIT) {
@@ -317,6 +328,9 @@
{
struct audio_device * adev = (struct audio_device *)ka.userdata;
+ if (ka.state == STATE_DISABLED)
+ return;
+
pthread_mutex_lock(&ka.lock);
if ((ka.state == STATE_DEINIT) || (ka.state == STATE_IDLE))
@@ -359,6 +373,9 @@
char value[32];
int ret;
+ if (ka.state == STATE_DISABLED)
+ return;
+
ret = str_parms_get_str(parms, AUDIO_PARAMETER_DEVICE_CONNECT, value, sizeof(value));
if (ret >= 0) {
int val = atoi(value);
diff --git a/hal/audio_extn/passthru.c b/hal/audio_extn/passthru.c
index 31c94f6..701084a 100644
--- a/hal/audio_extn/passthru.c
+++ b/hal/audio_extn/passthru.c
@@ -90,7 +90,7 @@
static volatile int32_t compress_passthru_active;
#ifdef DTSHD_PARSER_ENABLED
-static void passthru_update_stream_configuration_from_dts_parser( struct stream_out *out,
+int audio_extn_passthru_update_dts_stream_configuration(struct stream_out *out,
const void *buffer, size_t bytes)
{
struct audio_parser_codec_info codec_info;
@@ -100,6 +100,27 @@
bool is_valid_transmission_rate = false;
bool is_valid_transmission_channels = false;
+ if (!out) {
+ ALOGE("Invalid session");
+ return -EINVAL;
+ }
+
+ if ((out->format != AUDIO_FORMAT_DTS) &&
+ (out->format != AUDIO_FORMAT_DTS_HD)) {
+ ALOGE("Non DTS format %d", out->format);
+ return -EINVAL;
+ }
+
+ if (!buffer || bytes <= 0) {
+ ALOGD("Invalid buffer %p size %d skipping dts stream conf update",
+ buffer, bytes);
+ out->sample_rate = 48000;
+ out->compr_config.codec->sample_rate = out->sample_rate;
+ out->compr_config.codec->ch_in = 2;
+ out->channel_mask = audio_channel_out_mask_from_count(2);
+ return -EINVAL;
+ }
+
/* codec format is AUDIO_PARSER_CODEC_DTSHD for both DTS and DTSHD as
* DTSHD parser can support both DTS and DTSHD
*/
@@ -135,9 +156,9 @@
}
if (!is_valid_transmission_rate) {
- ALOGE("%s:: Invalid dts transmission rate %d\n using default sample rate 192000",
+ ALOGE("%s:: Invalid dts transmission rate %d\n using default sample rate 48000",
dtshd_tr_info.sample_rate);
- out->sample_rate = 192000;
+ out->sample_rate = 48000;
out->compr_config.codec->sample_rate = out->sample_rate;
}
@@ -147,14 +168,15 @@
out->compr_config.codec->ch_in = 2;
out->channel_mask = audio_channel_out_mask_from_count(2);
}
+ return 0;
}
#else
-static void passthru_update_stream_configuration_from_dts_parser(
+int audio_extn_passthru_update_dts_stream_configuration(
struct stream_out *out __unused,
const void *buffer __unused,
size_t bytes __unused)
{
- return;
+ return -ENOSYS;
}
#endif
@@ -391,7 +413,7 @@
void audio_extn_passthru_update_stream_configuration(
struct audio_device *adev, struct stream_out *out,
- const void *buffer, size_t bytes)
+ const void *buffer __unused, size_t bytes __unused)
{
if (audio_extn_passthru_is_passt_supported(adev, out)) {
ALOGV("%s:PASSTHROUGH", __func__);
@@ -406,15 +428,6 @@
ALOGV("%s:NO PASSTHROUGH", __func__);
out->compr_config.codec->compr_passthr = LEGACY_PCM;
}
-
- /*
- * for DTS passthrough, need to get sample rate from bitstream,
- * based on this sample rate hdmi backend will be configured
- */
- if ((out->format == AUDIO_FORMAT_DTS) ||
- (out->format == AUDIO_FORMAT_DTS_HD))
- passthru_update_stream_configuration_from_dts_parser(out, buffer, bytes);
-
}
bool audio_extn_passthru_is_passthrough_stream(struct stream_out *out)
@@ -451,6 +464,15 @@
return false;
}
+bool audio_extn_passthru_is_direct_passthrough(struct stream_out *out)
+{
+ if (((out != NULL) && audio_extn_passthru_is_passthrough_stream(out)) &&
+ !audio_extn_passthru_is_convert_supported(out->dev, out))
+ return true;
+ else
+ return false;
+}
+
int audio_extn_passthru_get_buffer_size(audio_offload_info_t* info)
{
uint32_t fragment_size = MIN_COMPRESS_PASSTHROUGH_FRAGMENT_SIZE;
diff --git a/hal/audio_extn/qaf.c b/hal/audio_extn/qaf.c
index 5dba1d2..6320b94 100644
--- a/hal/audio_extn/qaf.c
+++ b/hal/audio_extn/qaf.c
@@ -170,6 +170,7 @@
struct qaf_module {
audio_session_handle_t session_handle;
+ void *ip_hdlr_hdl;
void *qaf_lib;
int (*qaf_audio_session_open)(audio_session_handle_t* session_handle,
audio_session_type_t s_type,
@@ -246,6 +247,7 @@
static int qaf_out_pause(struct audio_stream_out* stream);
static int qaf_out_flush(struct audio_stream_out* stream);
static int qaf_out_drain(struct audio_stream_out* stream, audio_drain_type_t type);
+static int qaf_session_close();
//Global handle of QAF. Access to this should be protected by mutex lock.
static struct qaf *p_qaf = NULL;
@@ -763,8 +765,7 @@
DEBUG_MSG_VV("ret [%d]", (int)ret);
if (ret >= 0) {
- bytes = ret;
- out->written += bytes / ((popcount(out->channel_mask) * sizeof(short)));
+ out->written += ret / ((popcount(out->channel_mask) * sizeof(short)));
}
@@ -784,6 +785,11 @@
/ audio_stream_out_frame_size(stream)
/ out->stream.common.get_sample_rate(&out->stream.common));
}
+ } else if (ret < 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);
+ bytes = ret;
}
return bytes;
}
@@ -1249,6 +1255,13 @@
config.offload_info.bit_width = CODEC_BACKEND_DEFAULT_BIT_WIDTH;
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");
+ qaf_session_close(qaf_mod);
+ pthread_mutex_unlock(&p_qaf->lock);
+ return;
+ }
+
if (event_id == AUDIO_DATA_EVENT) {
data_buffer_p = (int8_t*)buf;
buffer_size = size;
@@ -1656,12 +1669,14 @@
}
DEBUG_MSG_VV("Bytes written = %d", ret);
}
- else if (event_id == AUDIO_EOS_MAIN_DD_DDP_EVENT
+ else if (event_id == AUDIO_EOS_EVENT
+ || event_id == AUDIO_EOS_MAIN_DD_DDP_EVENT
|| event_id == AUDIO_EOS_MAIN_2_DD_DDP_EVENT
|| event_id == AUDIO_EOS_MAIN_AAC_EVENT
|| event_id == AUDIO_EOS_MAIN_AC4_EVENT
|| event_id == AUDIO_EOS_ASSOC_DD_DDP_EVENT) {
struct stream_out *out = qaf_mod->stream_in[QAF_IN_MAIN];
+ struct stream_out *out_pcm = qaf_mod->stream_in[QAF_IN_PCM];
struct stream_out *out_main2 = qaf_mod->stream_in[QAF_IN_MAIN_2];
struct stream_out *out_assoc = qaf_mod->stream_in[QAF_IN_ASSOC];
@@ -1669,7 +1684,16 @@
* TODO:: Only DD/DDP Associate Eos is handled, need to add support
* for other formats.
*/
- if (event_id == AUDIO_EOS_ASSOC_DD_DDP_EVENT
+ if (event_id == AUDIO_EOS_EVENT
+ && (out_pcm != NULL)
+ && (check_stream_state(out_pcm, STOPPING))) {
+
+ lock_output_stream(out_pcm);
+ out_pcm->client_callback(STREAM_CBK_EVENT_DRAIN_READY, NULL, out_pcm->client_cookie);
+ set_stream_state(out_pcm, STOPPED);
+ unlock_output_stream(out_pcm);
+ DEBUG_MSG("sent pcm DRAIN_READY");
+ } else if (event_id == AUDIO_EOS_ASSOC_DD_DDP_EVENT
&& (out_assoc != NULL)
&& (check_stream_state(out_assoc, STOPPING))) {
@@ -1733,6 +1757,11 @@
}
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]) {
+ audio_extn_ip_hdlr_intf_close(qaf_mod->ip_hdlr_hdl, false, qaf_mod->session_handle);
+ }
+#endif
qaf_mod->qaf_audio_session_close(qaf_mod->session_handle);
qaf_mod->session_handle = NULL;
qaf_mod->is_vol_set = false;
@@ -1789,7 +1818,7 @@
}
/* Open a MM module session with QAF. */
-static int audio_extn_qaf_session_open(mm_module_type mod_type)
+static int audio_extn_qaf_session_open(mm_module_type mod_type, struct stream_out *out)
{
ALOGV("%s %d", __func__, __LINE__);
unsigned char* license_data = NULL;
@@ -1812,6 +1841,7 @@
return 0;
}
+#ifndef AUDIO_EXTN_IP_HDLR_ENABLED
if (mod_type == MS12) {
//Getting the license
license_data = platform_get_license((struct audio_hw_device *)(p_qaf->adev->platform),
@@ -1840,6 +1870,7 @@
goto exit;
}
}
+#endif
ret = qaf_mod->qaf_audio_session_open(&qaf_mod->session_handle,
AUDIO_SESSION_BROADCAST,
@@ -1864,6 +1895,16 @@
set_hdmi_configuration_to_module();
+#ifdef AUDIO_EXTN_IP_HDLR_ENABLED
+ 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);
+ goto exit;
+ }
+ }
+#endif
+
exit:
if (license_data != NULL) {
free(license_data);
@@ -1889,15 +1930,18 @@
struct qaf_module* qaf_mod = NULL;
DEBUG_MSG("Flags 0x%x, Device 0x%x", flags, devices);
- if (mmtype >= MAX_MM_MODULE_TYPE
- || p_qaf->qaf_mod[mmtype].qaf_audio_session_open == NULL
- || p_qaf->qaf_mod[mmtype].qaf_audio_stream_open == NULL) {
+ if (mmtype >= MAX_MM_MODULE_TYPE) {
ERROR_MSG("Unsupported Stream");
return -ENOTSUP;
}
+ 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;
+ }
//Open the module session, if not opened already.
- status = audio_extn_qaf_session_open(mmtype);
+ status = audio_extn_qaf_session_open(mmtype, out);
qaf_mod = &(p_qaf->qaf_mod[mmtype]);
if ((status != 0) || (qaf_mod->session_handle == NULL)) {
@@ -2110,7 +2154,7 @@
parms = str_parms_create_str(kvpairs);
ret = str_parms_get_int(parms, "buf_available", &value);
if (ret >= 0) {
- if (value >= (int)out->compr_config.fragment_size) {
+ if (value > 0) {
DEBUG_MSG_VV("buffer available");
str_parms_destroy(parms);
parms = NULL;
@@ -2819,21 +2863,42 @@
if (i == MS12) {
property_get("vendor.audio.qaf.library", value, NULL);
- } else if (i == DTS_M8) {
- property_get("vendor.audio.qaf.m8.library", value, NULL);
- } else {
+ snprintf(lib_name, PROPERTY_VALUE_MAX, "%s", value);
+#ifdef AUDIO_EXTN_IP_HDLR_ENABLED
+{
+ int ret = 0;
+ ret = audio_extn_ip_hdlr_intf_init(&qaf_mod->ip_hdlr_hdl, lib_name, &qaf_mod->qaf_lib,
+ adev, USECASE_AUDIO_PLAYBACK_OFFLOAD);
+ if (ret < 0) {
+ ERROR_MSG("audio_extn_ip_hdlr_intf_init failed, ret = %d", ret);
continue;
}
-
- snprintf(lib_name, PROPERTY_VALUE_MAX, "%s", value);
-
+ if (qaf_mod->qaf_lib == NULL) {
+ ERROR_MSG("failed to get library handle");
+ continue;
+ }
+}
+#else
qaf_mod->qaf_lib = dlopen(lib_name, RTLD_NOW);
if (qaf_mod->qaf_lib == NULL) {
ERROR_MSG("DLOPEN failed for %s", lib_name);
continue;
}
-
DEBUG_MSG("DLOPEN successful for %s", lib_name);
+#endif
+ } else if (i == DTS_M8) {
+ property_get("audio.qaf.m8.library", value, NULL);
+ snprintf(lib_name, PROPERTY_VALUE_MAX, "%s", value);
+ qaf_mod->qaf_lib = dlopen(lib_name, RTLD_NOW);
+ if (qaf_mod->qaf_lib == NULL) {
+ ERROR_MSG("DLOPEN failed for %s", lib_name);
+ continue;
+ }
+ DEBUG_MSG("DLOPEN successful for %s", lib_name);
+ } else {
+ continue;
+ }
+
qaf_mod->qaf_audio_session_open =
(int (*)(audio_session_handle_t* session_handle, audio_session_type_t s_type,
void *p_data, void* license_data))dlsym(qaf_mod->qaf_lib,
@@ -2896,8 +2961,17 @@
qaf_session_close(&p_qaf->qaf_mod[i]);
if (p_qaf->qaf_mod[i].qaf_lib != NULL) {
- dlclose(p_qaf->qaf_mod[i].qaf_lib);
- p_qaf->qaf_mod[i].qaf_lib = NULL;
+ if (i == MS12) {
+#ifdef AUDIO_EXTN_IP_HDLR_ENABLED
+ audio_extn_ip_hdlr_intf_deinit(p_qaf->qaf_mod[i].ip_hdlr_hdl);
+#else
+ dlclose(p_qaf->qaf_mod[i].qaf_lib);
+#endif
+ p_qaf->qaf_mod[i].qaf_lib = NULL;
+ } else {
+ dlclose(p_qaf->qaf_mod[i].qaf_lib);
+ p_qaf->qaf_mod[i].qaf_lib = NULL;
+ }
}
}
if (p_qaf->passthrough_out) {
diff --git a/hal/audio_extn/spkr_protection.c b/hal/audio_extn/spkr_protection.c
index 62916ac..a33d432 100644
--- a/hal/audio_extn/spkr_protection.c
+++ b/hal/audio_extn/spkr_protection.c
@@ -103,9 +103,9 @@
#define MAX_PATH (256)
#define MAX_STR_SIZE (1024)
-#define THERMAL_SYSFS "/sys/class/thermal"
-#define TZ_TYPE "/sys/class/thermal/thermal_zone%d/type"
-#define TZ_WSA "/sys/class/thermal/thermal_zone%d/temp"
+#define THERMAL_SYSFS "/sys/devices/virtual/thermal"
+#define TZ_TYPE "/sys/devices/virtual/thermal/thermal_zone%d/type"
+#define TZ_WSA "/sys/devices/virtual/thermal/thermal_zone%d/temp"
#define AUDIO_PARAMETER_KEY_SPKR_TZ_1 "spkr_1_tz_name"
#define AUDIO_PARAMETER_KEY_SPKR_TZ_2 "spkr_2_tz_name"
@@ -430,6 +430,20 @@
return -EINVAL;
}
+void destroy_thread_params()
+{
+ pthread_mutex_destroy(&handle.mutex_spkr_prot);
+ pthread_mutex_destroy(&handle.spkr_calib_cancelack_mutex);
+ pthread_mutex_destroy(&handle.cal_wait_cond_mutex);
+ pthread_cond_destroy(&handle.cal_wait_condition);
+ pthread_cond_destroy(&handle.spkr_calib_cancel);
+ pthread_cond_destroy(&handle.spkr_calibcancel_ack);
+ if(!handle.wsa_found) {
+ pthread_mutex_destroy(&handle.spkr_prot_thermalsync_mutex);
+ pthread_cond_destroy(&handle.spkr_prot_thermalsync);
+ }
+}
+
static int spkr_calibrate(int t0_spk_1, int t0_spk_2)
{
struct audio_device *adev = handle.adev_handle;
@@ -443,6 +457,7 @@
bool acquire_device = false;
status.status = 0;
+ memset(&protCfg, 0, sizeof(protCfg));
if (!adev) {
ALOGE("%s: Invalid params", __func__);
return -EINVAL;
@@ -1314,11 +1329,7 @@
handle.init_check = true;
} else {
ALOGE("%s: speaker calibration thread creation failed", __func__);
- pthread_mutex_destroy(&handle.mutex_spkr_prot);
- pthread_mutex_destroy(&handle.spkr_calib_cancelack_mutex);
- pthread_mutex_destroy(&handle.cal_wait_cond_mutex);
- pthread_cond_destroy(&handle.spkr_calib_cancel);
- pthread_cond_destroy(&handle.spkr_calibcancel_ack);
+ destroy_thread_params();
}
return;
} else {
@@ -1366,13 +1377,7 @@
handle.init_check = true;
} else {
ALOGE("%s: speaker calibration thread creation failed", __func__);
- pthread_mutex_destroy(&handle.mutex_spkr_prot);
- pthread_mutex_destroy(&handle.spkr_calib_cancelack_mutex);
- pthread_mutex_destroy(&handle.cal_wait_cond_mutex);
- pthread_cond_destroy(&handle.spkr_calib_cancel);
- pthread_cond_destroy(&handle.spkr_calibcancel_ack);
- pthread_mutex_destroy(&handle.spkr_prot_thermalsync_mutex);
- pthread_cond_destroy(&handle.spkr_prot_thermalsync);
+ destroy_thread_params();
}
} else {
ALOGE("%s: thermal_client_request failed", __func__);
@@ -1400,7 +1405,8 @@
{
int result = 0;
- ALOGD("%s: Entering deinit init_check :%d", __func__, handle.init_check);
+ ALOGD("%s: Entering deinit init_check :%d",
+ __func__, handle.init_check);
if(!handle.init_check)
return -1;
@@ -1411,15 +1417,7 @@
ALOGE("%s:Unable to join the calibration thread", __func__);
return -1;
}
- pthread_mutex_destroy(&handle.mutex_spkr_prot);
- pthread_mutex_destroy(&handle.spkr_calib_cancelack_mutex);
- pthread_mutex_destroy(&handle.cal_wait_cond_mutex);
- pthread_cond_destroy(&handle.spkr_calib_cancel);
- pthread_cond_destroy(&handle.spkr_calibcancel_ack);
- if(!handle.wsa_found) {
- pthread_mutex_destroy(&handle.spkr_prot_thermalsync_mutex);
- pthread_cond_destroy(&handle.spkr_prot_thermalsync);
- }
+ destroy_thread_params();
memset(&handle, 0, sizeof(handle));
return 0;
}
diff --git a/hal/audio_extn/utils.c b/hal/audio_extn/utils.c
index 9f78a0c..a236ccd 100644
--- a/hal/audio_extn/utils.c
+++ b/hal/audio_extn/utils.c
@@ -102,6 +102,10 @@
/* ToDo: Check and update a proper value in msec */
#define COMPRESS_OFFLOAD_PLAYBACK_LATENCY 50
+#ifndef MAX_CHANNELS_SUPPORTED
+#define MAX_CHANNELS_SUPPORTED 8
+#endif
+
struct string_to_enum {
const char *name;
uint32_t value;
@@ -122,6 +126,8 @@
STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_COMPRESS_PASSTHROUGH),
STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_TIMESTAMP),
STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_VOIP_RX),
+ STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_BD),
+ STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_INTERACTIVE),
STRING_TO_ENUM(AUDIO_INPUT_FLAG_NONE),
STRING_TO_ENUM(AUDIO_INPUT_FLAG_FAST),
STRING_TO_ENUM(AUDIO_INPUT_FLAG_HW_HOTWORD),
@@ -388,6 +394,7 @@
struct mixer_ctl *ctl = NULL;
const char *mixer_ctl_name = "App Type Config";
struct streams_io_cfg *s_info = NULL;
+ uint32_t target_bit_width = 0;
if (!mixer) {
ALOGE("%s: mixer is null",__func__);
@@ -413,6 +420,9 @@
num_app_types += 1;
}
+ /* get target bit width for ADM enforce mode */
+ target_bit_width = adev_get_dsp_bit_width_enforce_mode();
+
list_for_each(node, streams_output_cfg_list) {
s_info = node_to_item(node, struct streams_io_cfg, list);
update = true;
@@ -424,6 +434,11 @@
app_type_cfg[i+2] = s_info->app_type_cfg.sample_rate;
if (app_type_cfg[i+3] < (size_t)s_info->app_type_cfg.bit_width)
app_type_cfg[i+3] = s_info->app_type_cfg.bit_width;
+ /* ADM bit width = max(enforce_bit_width, bit_width from s_info */
+ if (audio_extn_is_dsp_bit_width_enforce_mode_supported(s_info->flags.out_flags) &&
+ (target_bit_width > app_type_cfg[i+3]))
+ app_type_cfg[i+3] = target_bit_width;
+
update = false;
break;
}
@@ -432,7 +447,12 @@
num_app_types += 1;
app_type_cfg[length++] = s_info->app_type_cfg.app_type;
app_type_cfg[length++] = s_info->app_type_cfg.sample_rate;
- app_type_cfg[length++] = s_info->app_type_cfg.bit_width;
+ app_type_cfg[length] = s_info->app_type_cfg.bit_width;
+ if (audio_extn_is_dsp_bit_width_enforce_mode_supported(s_info->flags.out_flags) &&
+ (target_bit_width > app_type_cfg[length]))
+ app_type_cfg[length] = target_bit_width;
+
+ length++;
}
}
list_for_each(node, streams_input_cfg_list) {
@@ -762,6 +782,28 @@
return native_usecase;
}
+bool audio_extn_is_dsp_bit_width_enforce_mode_supported(audio_output_flags_t flags)
+{
+ /* DSP bitwidth enforce mode for ADM and AFE:
+ * includes:
+ * deep buffer, low latency, direct pcm and offload.
+ * excludes:
+ * ull(raw+fast), VOIP.
+ */
+ if ((flags & AUDIO_OUTPUT_FLAG_VOIP_RX) ||
+ ((flags & AUDIO_OUTPUT_FLAG_RAW) &&
+ (flags & AUDIO_OUTPUT_FLAG_FAST)))
+ return false;
+
+
+ if ((flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) ||
+ (flags & AUDIO_OUTPUT_FLAG_DIRECT) ||
+ (flags & AUDIO_OUTPUT_FLAG_DEEP_BUFFER) ||
+ (flags & AUDIO_OUTPUT_FLAG_PRIMARY))
+ return true;
+ else
+ return false;
+}
static inline bool audio_is_vr_mode_on(struct audio_device *(__attribute__((unused)) adev))
{
@@ -803,6 +845,19 @@
&usecase->stream.in->app_type_cfg);
ALOGV("%s Selected apptype: %d", __func__, usecase->stream.in->app_type_cfg.app_type);
break;
+ case TRANSCODE_LOOPBACK :
+ audio_extn_utils_update_stream_output_app_type_cfg(adev->platform,
+ &adev->streams_output_cfg_list,
+ usecase->stream.inout->out_config.devices,
+ 0,
+ usecase->stream.inout->out_config.format,
+ usecase->stream.inout->out_config.sample_rate,
+ usecase->stream.inout->out_config.bit_width,
+ usecase->stream.inout->out_config.channel_mask,
+ usecase->stream.inout->profile,
+ &usecase->stream.inout->out_app_type_cfg);
+ ALOGV("%s Selected apptype: %d", __func__, usecase->stream.inout->out_app_type_cfg.app_type);
+ break;
default:
ALOGE("%s: app type cfg not supported for usecase type (%d)",
__func__, usecase->type);
@@ -821,13 +876,17 @@
int snd_device = split_snd_device, snd_device_be_idx = -1;
int32_t sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
char value[PROPERTY_VALUE_MAX] = {0};
+ struct streams_io_cfg *s_info = NULL;
+ struct listnode *node = NULL;
+ int direct_app_type = 0;
ALOGV("%s: usecase->out_snd_device %s, usecase->in_snd_device %s, split_snd_device %s",
__func__, platform_get_snd_device_name(usecase->out_snd_device),
platform_get_snd_device_name(usecase->in_snd_device),
platform_get_snd_device_name(split_snd_device));
- if (usecase->type != PCM_PLAYBACK && usecase->type != PCM_CAPTURE) {
+ if (usecase->type != PCM_PLAYBACK && usecase->type != PCM_CAPTURE &&
+ usecase->type != TRANSCODE_LOOPBACK) {
ALOGE("%s: not a playback/capture path, no need to cfg app type", __func__);
rc = 0;
goto exit_send_app_type_cfg;
@@ -837,6 +896,8 @@
(usecase->id != USECASE_AUDIO_PLAYBACK_MULTI_CH) &&
(usecase->id != USECASE_AUDIO_PLAYBACK_ULL) &&
(usecase->id != USECASE_AUDIO_PLAYBACK_VOIP) &&
+ (usecase->id != USECASE_AUDIO_TRANSCODE_LOOPBACK) &&
+ (!is_interactive_usecase(usecase->id)) &&
(!is_offload_usecase(usecase->id)) &&
(usecase->type != PCM_CAPTURE)) {
ALOGV("%s: a rx/tx/loopback path where app type cfg is not required %d", __func__, usecase->id);
@@ -851,7 +912,7 @@
goto exit_send_app_type_cfg;
}
- if (usecase->type == PCM_PLAYBACK) {
+ if (usecase->type == PCM_PLAYBACK || usecase->type == TRANSCODE_LOOPBACK) {
pcm_device_id = platform_get_pcm_device_id(usecase->id, PCM_PLAYBACK);
snprintf(mixer_ctl_name, sizeof(mixer_ctl_name),
"Audio Stream %d App Type Cfg", pcm_device_id);
@@ -917,13 +978,25 @@
}
sample_rate = usecase->stream.out->app_type_cfg.sample_rate;
- app_type = usecase->stream.out->app_type_cfg.app_type;
+ /* Interactive streams are supported with only direct app type id.
+ * Get Direct profile app type and use it for interactive streams
+ */
+ list_for_each(node, &adev->streams_output_cfg_list) {
+ s_info = node_to_item(node, struct streams_io_cfg, list);
+ if (s_info->flags.out_flags == AUDIO_OUTPUT_FLAG_DIRECT)
+ direct_app_type = s_info->app_type_cfg.app_type;
+ }
+ if (usecase->stream.out->flags == AUDIO_OUTPUT_FLAG_INTERACTIVE)
+ app_type = direct_app_type;
+ else
+ app_type = usecase->stream.out->app_type_cfg.app_type;
app_type_cfg[len++] = app_type;
app_type_cfg[len++] = acdb_dev_id;
if (((usecase->stream.out->format == AUDIO_FORMAT_E_AC3) ||
(usecase->stream.out->format == AUDIO_FORMAT_E_AC3_JOC) ||
(usecase->stream.out->format == AUDIO_FORMAT_DOLBY_TRUEHD))
- && audio_extn_passthru_is_passthrough_stream(usecase->stream.out)) {
+ && audio_extn_passthru_is_passthrough_stream(usecase->stream.out)
+ && !audio_extn_passthru_is_convert_supported(adev, usecase->stream.out)) {
sample_rate = sample_rate * 4;
if (sample_rate > HDMI_PASSTHROUGH_MAX_SAMPLE_RATE)
@@ -949,6 +1022,10 @@
__func__, app_type, acdb_dev_id, sample_rate, snd_device_be_idx);
} else {
app_type = platform_get_default_app_type_v2(adev->platform, usecase->type);
+ if(usecase->type == TRANSCODE_LOOPBACK) {
+ sample_rate = usecase->stream.inout->out_config.sample_rate;
+ app_type = usecase->stream.inout->out_app_type_cfg.app_type;
+ }
app_type_cfg[len++] = app_type;
app_type_cfg[len++] = acdb_dev_id;
app_type_cfg[len++] = sample_rate;
@@ -958,7 +1035,8 @@
__func__, app_type, acdb_dev_id, sample_rate, snd_device_be_idx);
}
- mixer_ctl_set_array(ctl, app_type_cfg, len);
+ if(ctl)
+ mixer_ctl_set_array(ctl, app_type_cfg, len);
rc = 0;
exit_send_app_type_cfg:
return rc;
@@ -973,6 +1051,7 @@
switch (usecase->type) {
case PCM_PLAYBACK:
+ case TRANSCODE_LOOPBACK:
ALOGD("%s: usecase->out_snd_device %s",
__func__, platform_get_snd_device_name(usecase->out_snd_device));
/* check for out combo device */
@@ -1165,7 +1244,8 @@
*be multiple of (number of channels * bytes per sample)
*For writes to succeed, the buffer must be written at address which is multiple of 32
*/
- fragment_size = ALIGN(fragment_size, (bytes_per_sample * noOfChannels * 32));
+ fragment_size = ALIGN(fragment_size, (bytes_per_sample * noOfChannels));
+ fragment_size = ALIGN(fragment_size, 32);
ALOGI("PCM offload Fragment size to %d bytes", fragment_size);
return fragment_size;
@@ -1312,6 +1392,13 @@
platform_send_audio_calibration(adev->platform, usecase,
platform_get_default_app_type_v2(adev->platform, usecase->type),
48000);
+ } else if (type == TRANSCODE_LOOPBACK && usecase->stream.inout != NULL) {
+ int snd_device = usecase->out_snd_device;
+ snd_device = (snd_device == SND_DEVICE_OUT_SPEAKER) ?
+ platform_get_spkr_prot_snd_device(snd_device) : snd_device;
+ platform_send_audio_calibration(adev->platform, usecase,
+ platform_get_default_app_type_v2(adev->platform, usecase->type),
+ usecase->stream.inout->out_config.sample_rate);
} else {
/* No need to send audio calibration for voice and voip call usecases */
if ((type != VOICE_CALL) && (type != VOIP_CALL))
@@ -2160,3 +2247,107 @@
exit:
return ret;
}
+
+int audio_extn_utils_set_pan_scale_params(
+ struct stream_out *out,
+ struct mix_matrix_params *mm_params)
+{
+ int ret = -EINVAL, i = 0, j = 0;
+
+ if (mm_params == NULL && out != NULL) {
+ ALOGE("%s:: Invalid mix matrix params", __func__);
+ goto exit;
+ }
+
+ if (mm_params->num_output_channels > MAX_CHANNELS_SUPPORTED ||
+ mm_params->num_output_channels <= 0 ||
+ mm_params->num_input_channels > MAX_CHANNELS_SUPPORTED ||
+ mm_params->num_input_channels <= 0)
+ goto exit;
+
+ out->pan_scale_params.num_output_channels = mm_params->num_output_channels;
+ out->pan_scale_params.num_input_channels = mm_params->num_input_channels;
+ out->pan_scale_params.has_output_channel_map =
+ mm_params->has_output_channel_map;
+ for (i = 0; i < mm_params->num_output_channels; i++)
+ out->pan_scale_params.output_channel_map[i] =
+ mm_params->output_channel_map[i];
+
+ out->pan_scale_params.has_input_channel_map =
+ mm_params->has_input_channel_map;
+ for (i = 0; i < mm_params->num_input_channels; i++)
+ out->pan_scale_params.input_channel_map[i] =
+ mm_params->input_channel_map[i];
+
+ out->pan_scale_params.has_mixer_coeffs = mm_params->has_mixer_coeffs;
+ for (i = 0; i < mm_params->num_output_channels; i++)
+ for (j = 0; j < mm_params->num_input_channels; j++) {
+ //Convert the channel coefficient gains in Q14 format
+ out->pan_scale_params.mixer_coeffs[i][j] =
+ mm_params->mixer_coeffs[i][j] * (2 << 13);
+ }
+
+ ret = platform_set_stream_pan_scale_params(out->dev->platform,
+ out->pcm_device_id,
+ out->pan_scale_params);
+
+exit:
+ return ret;
+}
+
+int audio_extn_utils_set_downmix_params(
+ struct stream_out *out,
+ struct mix_matrix_params *mm_params)
+{
+ int ret = -EINVAL, i = 0, j = 0;
+ struct audio_usecase *usecase = NULL;
+
+ if (mm_params == NULL || out == NULL) {
+ ALOGE("%s:: Invalid mix matrix params", __func__);
+ goto exit;
+ }
+
+ if (mm_params->num_output_channels > MAX_CHANNELS_SUPPORTED ||
+ mm_params->num_output_channels <= 0 ||
+ mm_params->num_input_channels > MAX_CHANNELS_SUPPORTED ||
+ mm_params->num_input_channels <= 0)
+ goto exit;
+
+ usecase = get_usecase_from_list(out->dev, out->usecase);
+ if (usecase == NULL) {
+ ALOGE("%s: Invalid usecase", __func__);
+ goto exit;
+ }
+
+ out->downmix_params.num_output_channels = mm_params->num_output_channels;
+ out->downmix_params.num_input_channels = mm_params->num_input_channels;
+
+ out->downmix_params.has_output_channel_map =
+ mm_params->has_output_channel_map;
+ for (i = 0; i < mm_params->num_output_channels; i++) {
+ out->downmix_params.output_channel_map[i] =
+ mm_params->output_channel_map[i];
+ }
+
+ out->downmix_params.has_input_channel_map =
+ mm_params->has_input_channel_map;
+ for (i = 0; i < mm_params->num_input_channels; i++)
+ out->downmix_params.input_channel_map[i] =
+ mm_params->input_channel_map[i];
+
+ out->downmix_params.has_mixer_coeffs = mm_params->has_mixer_coeffs;
+ for (i = 0; i < mm_params->num_output_channels; i++)
+ for (j = 0; j < mm_params->num_input_channels; j++) {
+ //Convert the channel coefficient gains in Q14 format
+ out->downmix_params.mixer_coeffs[i][j] =
+ mm_params->mixer_coeffs[i][j] * (2 << 13);
+ }
+
+ ret = platform_set_stream_downmix_params(out->dev->platform,
+ out->pcm_device_id,
+ usecase->out_snd_device,
+ out->downmix_params);
+
+exit:
+ return ret;
+}
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 996a9a1..6653f6a 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -64,6 +64,7 @@
#include <hardware/audio_effect.h>
#include <system/thread_defs.h>
+#include <tinyalsa/asoundlib.h>
#include <audio_effects/effect_aec.h>
#include <audio_effects/effect_ns.h>
#include <audio_utils/format.h>
@@ -118,6 +119,11 @@
static unsigned int configured_low_latency_capture_period_size =
LOW_LATENCY_CAPTURE_PERIOD_SIZE;
+#define MMAP_PERIOD_SIZE (DEFAULT_OUTPUT_SAMPLING_RATE/1000)
+#define MMAP_PERIOD_COUNT_MIN 32
+#define MMAP_PERIOD_COUNT_MAX 512
+#define MMAP_PERIOD_COUNT_DEFAULT (MMAP_PERIOD_COUNT_MAX)
+
struct pcm_config pcm_config_deep_buffer = {
.channels = 2,
.rate = DEFAULT_OUTPUT_SAMPLING_RATE,
@@ -165,6 +171,19 @@
.avail_min = 0,
};
+struct pcm_config pcm_config_mmap_playback = {
+ .channels = 2,
+ .rate = DEFAULT_OUTPUT_SAMPLING_RATE,
+ .period_size = MMAP_PERIOD_SIZE,
+ .period_count = MMAP_PERIOD_COUNT_DEFAULT,
+ .format = PCM_FORMAT_S16_LE,
+ .start_threshold = MMAP_PERIOD_SIZE*8,
+ .stop_threshold = INT32_MAX,
+ .silence_threshold = 0,
+ .silence_size = 0,
+ .avail_min = MMAP_PERIOD_SIZE, //1 ms
+};
+
struct pcm_config pcm_config_audio_capture = {
.channels = 2,
.period_count = AUDIO_CAPTURE_PERIOD_COUNT,
@@ -184,6 +203,19 @@
.avail_min = ULL_PERIOD_SIZE, //1 ms
};
+struct pcm_config pcm_config_mmap_capture = {
+ .channels = 2,
+ .rate = DEFAULT_OUTPUT_SAMPLING_RATE,
+ .period_size = MMAP_PERIOD_SIZE,
+ .period_count = MMAP_PERIOD_COUNT_DEFAULT,
+ .format = PCM_FORMAT_S16_LE,
+ .start_threshold = 0,
+ .stop_threshold = INT_MAX,
+ .silence_threshold = 0,
+ .silence_size = 0,
+ .avail_min = MMAP_PERIOD_SIZE, //1 ms
+};
+
#define AFE_PROXY_CHANNEL_COUNT 2
#define AFE_PROXY_SAMPLING_RATE 48000
@@ -242,6 +274,8 @@
[USECASE_AUDIO_PLAYBACK_OFFLOAD7] = "compress-offload-playback7",
[USECASE_AUDIO_PLAYBACK_OFFLOAD8] = "compress-offload-playback8",
[USECASE_AUDIO_PLAYBACK_OFFLOAD9] = "compress-offload-playback9",
+ [USECASE_AUDIO_PLAYBACK_FM] = "play-fm",
+ [USECASE_AUDIO_PLAYBACK_MMAP] = "mmap-playback",
[USECASE_AUDIO_RECORD] = "audio-record",
[USECASE_AUDIO_RECORD_COMPRESS] = "audio-record-compress",
@@ -250,7 +284,8 @@
[USECASE_AUDIO_RECORD_COMPRESS4] = "audio-record-compress4",
[USECASE_AUDIO_RECORD_LOW_LATENCY] = "low-latency-record",
[USECASE_AUDIO_RECORD_FM_VIRTUAL] = "fm-virtual-record",
- [USECASE_AUDIO_PLAYBACK_FM] = "play-fm",
+ [USECASE_AUDIO_RECORD_MMAP] = "mmap-record",
+
[USECASE_AUDIO_HFP_SCO] = "hfp-sco",
[USECASE_AUDIO_HFP_SCO_WB] = "hfp-sco-wb",
[USECASE_VOICE_CALL] = "voice-call",
@@ -283,6 +318,15 @@
[USECASE_AUDIO_PLAYBACK_VOIP] = "audio-playback-voip",
[USECASE_AUDIO_RECORD_VOIP] = "audio-record-voip",
+ /* For Interactive Audio Streams */
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM1] = "audio-interactive-stream1",
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM2] = "audio-interactive-stream2",
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM3] = "audio-interactive-stream3",
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM4] = "audio-interactive-stream4",
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM5] = "audio-interactive-stream5",
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM6] = "audio-interactive-stream6",
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM7] = "audio-interactive-stream7",
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM8] = "audio-interactive-stream8",
};
static const audio_usecase_t offload_usecases[] = {
@@ -297,6 +341,17 @@
USECASE_AUDIO_PLAYBACK_OFFLOAD9,
};
+static const audio_usecase_t interactive_usecases[] = {
+ USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM1,
+ USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM2,
+ USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM3,
+ USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM4,
+ USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM5,
+ USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM6,
+ USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM7,
+ USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM8,
+};
+
#define STRING_TO_ENUM(string) { #string, string }
struct string_to_enum {
@@ -348,6 +403,7 @@
static int check_a2dp_restore_l(struct audio_device *adev, struct stream_out *out, bool restore);
static int out_set_compr_volume(struct audio_stream_out *stream, float left, float right);
+static int out_set_voip_volume(struct audio_stream_out *stream, float left, float right);
static bool may_use_noirq_mode(struct audio_device *adev, audio_usecase_t uc_id,
int flags __unused)
@@ -1460,6 +1516,84 @@
return active;
}
+uint32_t adev_get_dsp_bit_width_enforce_mode()
+{
+ if (adev == NULL) {
+ ALOGE("%s: adev is null. Disable DSP bit width enforce mode.\n", __func__);
+ return 0;
+ }
+ return adev->dsp_bit_width_enforce_mode;
+}
+
+static uint32_t adev_init_dsp_bit_width_enforce_mode(struct mixer *mixer)
+{
+ char value[PROPERTY_VALUE_MAX];
+ int trial;
+ uint32_t dsp_bit_width_enforce_mode = 0;
+
+ if (!mixer) {
+ ALOGE("%s: adev mixer is null. cannot update DSP bitwidth.\n",
+ __func__);
+ return 0;
+ }
+
+ if (property_get("persist.vendor.audio_hal.dsp_bit_width_enforce_mode",
+ value, NULL) > 0) {
+ trial = atoi(value);
+ switch (trial) {
+ case 16:
+ dsp_bit_width_enforce_mode = 16;
+ break;
+ case 24:
+ dsp_bit_width_enforce_mode = 24;
+ break;
+ case 32:
+ dsp_bit_width_enforce_mode = 32;
+ break;
+ default:
+ dsp_bit_width_enforce_mode = 0;
+ ALOGD("%s Dynamic DSP bitwidth config is disabled.", __func__);
+ break;
+ }
+ }
+
+ return dsp_bit_width_enforce_mode;
+}
+
+static void audio_enable_asm_bit_width_enforce_mode(struct mixer *mixer,
+ uint32_t enforce_mode,
+ bool enable)
+{
+ struct mixer_ctl *ctl = NULL;
+ const char *mixer_ctl_name = "ASM Bit Width";
+ uint32_t asm_bit_width_mode = 0;
+
+ if (enforce_mode == 0) {
+ ALOGD("%s: DSP bitwidth feature is disabled.", __func__);
+ return;
+ }
+
+ ctl = mixer_get_ctl_by_name(mixer, mixer_ctl_name);
+ if (!ctl) {
+ ALOGE("%s: Could not get ctl for mixer cmd - %s",
+ __func__, mixer_ctl_name);
+ return;
+ }
+
+ if (enable)
+ asm_bit_width_mode = enforce_mode;
+ else
+ asm_bit_width_mode = 0;
+
+ ALOGV("%s DSP bit width feature status is %d width=%d",
+ __func__, enable, asm_bit_width_mode);
+ if (mixer_ctl_set_value(ctl, 0, asm_bit_width_mode) < 0)
+ ALOGE("%s: Could not set ASM biwidth %d", __func__,
+ asm_bit_width_mode);
+
+ return;
+}
+
/*
* if native DSD playback active
*/
@@ -1512,6 +1646,10 @@
ret = true;
}
+ if (usecase->stream.out->stream_config_changed) {
+ ALOGD("Force stream_config_changed to update iec61937 transmission config");
+ return true;
+ }
return ret;
}
@@ -1731,10 +1869,10 @@
voice_check_and_update_aanc_path(adev, usecase->out_snd_device, false);
}
- if ((usecase->out_snd_device == SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP) &&
+ if ((out_snd_device == SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP) &&
(!audio_extn_a2dp_is_ready())) {
ALOGW("%s: A2DP profile is not ready, routing to speaker only", __func__);
- usecase->out_snd_device = SND_DEVICE_OUT_SPEAKER;
+ out_snd_device = SND_DEVICE_OUT_SPEAKER;
}
/* Disable current sound devices */
@@ -1976,60 +2114,75 @@
adev->perf_lock_opts_size);
select_devices(adev, in->usecase);
- ALOGV("%s: Opening PCM device card_id(%d) device_id(%d), channels %d format %d",
- __func__, adev->snd_card, in->pcm_device_id, in->config.channels, in->config.format);
-
- if (audio_extn_cin_attached_usecase(in->usecase)) {
+ if (audio_extn_cin_attached_usecase(in->usecase)) {
ret = audio_extn_cin_start_input_stream(in);
if (ret)
goto error_open;
else
goto done_open;
- }
-
- unsigned int flags = PCM_IN;
- unsigned int pcm_open_retry_count = 0;
-
- if (in->usecase == USECASE_AUDIO_RECORD_AFE_PROXY) {
- flags |= PCM_MMAP | PCM_NOIRQ;
- pcm_open_retry_count = PROXY_OPEN_RETRY_COUNT;
- } else if (in->realtime) {
- flags |= PCM_MMAP | PCM_NOIRQ;
}
- while (1) {
- in->pcm = pcm_open(adev->snd_card, in->pcm_device_id,
- flags, &in->config);
+ if (in->usecase == USECASE_AUDIO_RECORD_MMAP) {
if (in->pcm == NULL || !pcm_is_ready(in->pcm)) {
- ALOGE("%s: %s", __func__, pcm_get_error(in->pcm));
- if (in->pcm != NULL) {
+ ALOGE("%s: pcm stream not ready", __func__);
+ goto error_open;
+ }
+ ret = pcm_start(in->pcm);
+ if (ret < 0) {
+ ALOGE("%s: MMAP pcm_start failed ret %d", __func__, ret);
+ goto error_open;
+ }
+ } else {
+ unsigned int flags = PCM_IN | PCM_MONOTONIC;
+ unsigned int pcm_open_retry_count = 0;
+
+ if (in->usecase == USECASE_AUDIO_RECORD_AFE_PROXY) {
+ flags |= PCM_MMAP | PCM_NOIRQ;
+ pcm_open_retry_count = PROXY_OPEN_RETRY_COUNT;
+ } else if (in->realtime) {
+ flags |= PCM_MMAP | PCM_NOIRQ;
+ }
+
+ ALOGV("%s: Opening PCM device card_id(%d) device_id(%d), channels %d",
+ __func__, adev->snd_card, in->pcm_device_id, in->config.channels);
+
+ while (1) {
+ in->pcm = pcm_open(adev->snd_card, in->pcm_device_id,
+ flags, &in->config);
+ if (in->pcm == NULL || !pcm_is_ready(in->pcm)) {
+ ALOGE("%s: %s", __func__, pcm_get_error(in->pcm));
+ if (in->pcm != NULL) {
+ pcm_close(in->pcm);
+ in->pcm = NULL;
+ }
+ if (pcm_open_retry_count-- == 0) {
+ ret = -EIO;
+ goto error_open;
+ }
+ usleep(PROXY_OPEN_WAIT_TIME * 1000);
+ continue;
+ }
+ break;
+ }
+
+ ALOGV("%s: pcm_prepare", __func__);
+ ret = pcm_prepare(in->pcm);
+ if (ret < 0) {
+ ALOGE("%s: pcm_prepare returned %d", __func__, ret);
+ pcm_close(in->pcm);
+ in->pcm = NULL;
+ goto error_open;
+ }
+ register_in_stream(in);
+ if (in->realtime) {
+ ret = pcm_start(in->pcm);
+ if (ret < 0) {
+ ALOGE("%s: RT pcm_start failed ret %d", __func__, ret);
pcm_close(in->pcm);
in->pcm = NULL;
- }
- if (pcm_open_retry_count-- == 0) {
- ret = -EIO;
goto error_open;
}
- usleep(PROXY_OPEN_WAIT_TIME * 1000);
- continue;
}
- break;
- }
-
- ALOGV("%s: pcm_prepare", __func__);
- ret = pcm_prepare(in->pcm);
- if (ret < 0) {
- ALOGE("%s: pcm_prepare returned %d", __func__, ret);
- pcm_close(in->pcm);
- in->pcm = NULL;
- goto error_open;
- }
-
- register_in_stream(in);
- if (in->realtime) {
- ret = pcm_start(in->pcm);
- if (ret < 0)
- goto error_open;
}
done_open:
@@ -2099,6 +2252,50 @@
}
}
+bool is_interactive_usecase(audio_usecase_t uc_id)
+{
+ unsigned int i;
+ for (i = 0; i < sizeof(interactive_usecases)/sizeof(interactive_usecases[0]); i++) {
+ if (uc_id == interactive_usecases[i])
+ return true;
+ }
+ return false;
+}
+
+static audio_usecase_t get_interactive_usecase(struct audio_device *adev)
+{
+ audio_usecase_t ret_uc = USECASE_INVALID;
+ unsigned int intract_uc_index;
+ unsigned int num_usecase = sizeof(interactive_usecases)/sizeof(interactive_usecases[0]);
+
+ ALOGV("%s: num_usecase: %d", __func__, num_usecase);
+ for (intract_uc_index = 0; intract_uc_index < num_usecase; intract_uc_index++) {
+ if (!(adev->interactive_usecase_state & (0x1 << intract_uc_index))) {
+ adev->interactive_usecase_state |= 0x1 << intract_uc_index;
+ ret_uc = interactive_usecases[intract_uc_index];
+ break;
+ }
+ }
+
+ ALOGV("%s: Interactive usecase is %d", __func__, ret_uc);
+ return ret_uc;
+}
+
+static void free_interactive_usecase(struct audio_device *adev,
+ audio_usecase_t uc_id)
+{
+ unsigned int interact_uc_index;
+ unsigned int num_usecase = sizeof(interactive_usecases)/sizeof(interactive_usecases[0]);
+
+ for (interact_uc_index = 0; interact_uc_index < num_usecase; interact_uc_index++) {
+ if (interactive_usecases[interact_uc_index] == uc_id) {
+ adev->interactive_usecase_state &= ~(0x1 << interact_uc_index);
+ break;
+ }
+ }
+ ALOGV("%s: free Interactive usecase %d", __func__, uc_id);
+}
+
bool is_offload_usecase(audio_usecase_t uc_id)
{
unsigned int i;
@@ -2330,6 +2527,12 @@
/* 2. Disable the rx device */
disable_snd_device(adev, uc_info->out_snd_device);
+ if (is_offload_usecase(out->usecase)) {
+ audio_enable_asm_bit_width_enforce_mode(adev->mixer,
+ adev->dsp_bit_width_enforce_mode,
+ false);
+ }
+
list_remove(&uc_info->list);
free(uc_info);
out->started = 0;
@@ -2346,7 +2549,7 @@
if (out->devices & AUDIO_DEVICE_OUT_AUX_DIGITAL)
audio_extn_keep_alive_start();
- if (audio_extn_ip_hdlr_intf_supported(out->format) && out->ip_hdlr_handle) {
+ if (out->ip_hdlr_handle) {
ret = audio_extn_ip_hdlr_intf_close(out->ip_hdlr_handle, true, out);
if (ret < 0)
ALOGE("%s: audio_extn_ip_hdlr_intf_close failed %d",__func__, ret);
@@ -2460,7 +2663,18 @@
ALOGV("%s: Opening PCM device card_id(%d) device_id(%d) format(%#x)",
__func__, adev->snd_card, out->pcm_device_id, out->config.format);
- if (!is_offload_usecase(out->usecase)) {
+
+ if (out->usecase == USECASE_AUDIO_PLAYBACK_MMAP) {
+ if (out->pcm == NULL || !pcm_is_ready(out->pcm)) {
+ ALOGE("%s: pcm stream not ready", __func__);
+ goto error_open;
+ }
+ ret = pcm_start(out->pcm);
+ if (ret < 0) {
+ ALOGE("%s: MMAP pcm_start failed ret %d", __func__, ret);
+ goto error_open;
+ }
+ } else if (!is_offload_usecase(out->usecase)) {
unsigned int flags = PCM_OUT;
unsigned int pcm_open_retry_count = 0;
if (out->usecase == USECASE_AUDIO_PLAYBACK_AFE_PROXY) {
@@ -2524,10 +2738,15 @@
}
platform_set_stream_channel_map(adev->platform, out->channel_mask,
out->pcm_device_id, &out->channel_map_param.channel_map[0]);
-
+ // apply volume for voip playback after path is set up
+ if (out->usecase == USECASE_AUDIO_PLAYBACK_VOIP)
+ out_set_voip_volume(&out->stream, out->volume_l, out->volume_r);
} else {
platform_set_stream_channel_map(adev->platform, out->channel_mask,
out->pcm_device_id, &out->channel_map_param.channel_map[0]);
+ audio_enable_asm_bit_width_enforce_mode(adev->mixer,
+ adev->dsp_bit_width_enforce_mode,
+ true);
out->pcm = NULL;
out->compr = compress_open(adev->snd_card,
out->pcm_device_id,
@@ -2578,6 +2797,10 @@
if (ret == 0) {
register_out_stream(out);
if (out->realtime) {
+ if (out->pcm == NULL || !pcm_is_ready(out->pcm)) {
+ ALOGE("%s: pcm stream not ready", __func__);
+ goto error_open;
+ }
ret = pcm_start(out->pcm);
if (ret < 0)
goto error_open;
@@ -2587,7 +2810,7 @@
audio_extn_perf_lock_release(&adev->perf_lock_handle);
ALOGD("%s: exit", __func__);
- if (audio_extn_ip_hdlr_intf_supported(out->format) && out->ip_hdlr_handle) {
+ if (out->ip_hdlr_handle) {
ret = audio_extn_ip_hdlr_intf_open(out->ip_hdlr_handle, true, out, out->usecase);
if (ret < 0)
ALOGE("%s: audio_extn_ip_hdlr_intf_open failed %d",__func__, ret);
@@ -2753,7 +2976,9 @@
{
struct stream_out *out = (struct stream_out *)stream;
- if (out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) {
+ if (is_interactive_usecase(out->usecase)) {
+ return out->config.period_size * out->config.period_count;
+ } else if (out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) {
if (out->flags & AUDIO_OUTPUT_FLAG_TIMESTAMP)
return out->compr_config.fragment_size - sizeof(struct snd_codec_metadata);
else
@@ -2796,6 +3021,7 @@
struct audio_device *adev = out->dev;
struct audio_usecase *uc_info;
struct listnode *node;
+ bool do_stop = true;
ALOGD("%s: enter: stream (%p) usecase(%d: %s)", __func__,
stream, out->usecase, use_case_table[out->usecase]);
@@ -2822,6 +3048,10 @@
pcm_close(out->pcm);
out->pcm = NULL;
}
+ if (out->usecase == USECASE_AUDIO_PLAYBACK_MMAP) {
+ do_stop = out->playback_started;
+ out->playback_started = false;
+ }
} else {
ALOGD("copl(%p):standby", out);
out->send_next_track_params = false;
@@ -2833,7 +3063,9 @@
out->compr = NULL;
}
}
- stop_output_stream(out);
+ if (do_stop) {
+ stop_output_stream(out);
+ }
//restore output device for active usecase when current snd device and output device mismatch
list_for_each(node, &adev->usecase_list) {
uc_info = node_to_item(node, struct audio_usecase, list);
@@ -3113,7 +3345,7 @@
audio_extn_perf_lock_release(&adev->perf_lock_handle);
if ((out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) &&
out->a2dp_compress_mute &&
- (!(out->devices & AUDIO_DEVICE_OUT_ALL_A2DP))) {
+ (!(out->devices & AUDIO_DEVICE_OUT_ALL_A2DP) || audio_extn_a2dp_is_ready())) {
pthread_mutex_lock(&out->compr_mute_lock);
out->a2dp_compress_mute = false;
out_set_compr_volume(&out->stream, out->volume_l, out->volume_r);
@@ -3334,7 +3566,8 @@
lock_output_stream(out);
latency = audio_extn_utils_compress_get_dsp_latency(out);
pthread_mutex_unlock(&out->lock);
- } else if (out->realtime) {
+ } else if ((out->realtime) ||
+ (out->usecase == USECASE_AUDIO_PLAYBACK_MMAP)) {
// since the buffer won't be filled up faster than realtime,
// return a smaller number
if (out->config.rate)
@@ -3394,6 +3627,31 @@
return 0;
}
+static int out_set_voip_volume(struct audio_stream_out *stream, float left,
+ float right)
+{
+ struct stream_out *out = (struct stream_out *)stream;
+ char mixer_ctl_name[] = "App Type Gain";
+ struct audio_device *adev = out->dev;
+ struct mixer_ctl *ctl;
+ uint32_t set_values[4];
+
+ ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
+ if (!ctl) {
+ ALOGE("%s: Could not get ctl for mixer cmd - %s",
+ __func__, mixer_ctl_name);
+ return -EINVAL;
+ }
+
+ 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);
+
+ mixer_ctl_set_array(ctl, set_values, ARRAY_SIZE(set_values));
+ return 0;
+}
+
static int out_set_volume(struct audio_stream_out *stream, float left,
float right)
{
@@ -3438,36 +3696,37 @@
return ret;
}
} else if (out->usecase == USECASE_AUDIO_PLAYBACK_VOIP) {
- char mixer_ctl_name[] = "App Type Gain";
- struct audio_device *adev = out->dev;
- struct mixer_ctl *ctl;
- uint32_t set_values[4];
-
- ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
- if (!ctl) {
- ALOGE("%s: Could not get ctl for mixer cmd - %s",
- __func__, mixer_ctl_name);
- return -EINVAL;
- }
-
- 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);
-
- mixer_ctl_set_array(ctl, set_values, ARRAY_SIZE(set_values));
- return 0;
+ if (!out->standby)
+ ret = out_set_voip_volume(stream, left, right);
+ out->volume_l = left;
+ out->volume_r = right;
+ return ret;
}
return -ENOSYS;
}
+static void update_frames_written(struct stream_out *out, size_t bytes)
+{
+ size_t bpf = 0;
+
+ if (is_offload_usecase(out->usecase) && !out->non_blocking &&
+ !(out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD))
+ bpf = 1;
+ else if (!is_offload_usecase(out->usecase))
+ bpf = audio_bytes_per_sample(out->format) *
+ audio_channel_count_from_out_mask(out->channel_mask);
+ if (bpf != 0)
+ out->written += bytes / bpf;
+}
+
static ssize_t out_write(struct audio_stream_out *stream, const void *buffer,
size_t bytes)
{
struct stream_out *out = (struct stream_out *)stream;
struct audio_device *adev = out->dev;
ssize_t ret = 0;
+ int channels = 0;
lock_output_stream(out);
@@ -3479,14 +3738,6 @@
pthread_mutex_unlock(&out->lock);
return -ENETRESET;
} else {
- /* increase written size during SSR to avoid mismatch
- * with the written frames count in AF
- */
- // bytes per frame
- size_t bpf = audio_bytes_per_sample(out->format) *
- audio_channel_count_from_out_mask(out->channel_mask);
- if (bpf != 0)
- out->written += bytes / bpf;
ALOGD(" %s: sound card is not active/SSR state", __func__);
ret= -EIO;
goto exit;
@@ -3495,19 +3746,54 @@
if (audio_extn_passthru_should_drop_data(out)) {
ALOGV(" %s : Drop data as compress passthrough session is going on", __func__);
- if ((audio_bytes_per_sample(out->format) != 0) && (out->config.channels != 0))
- out->written += bytes / (out->config.channels * audio_bytes_per_sample(out->format));
ret = -EIO;
goto exit;
}
+ if (out->usecase == USECASE_AUDIO_PLAYBACK_MMAP) {
+ ret = -EINVAL;
+ goto exit;
+ }
+
if (out->devices & AUDIO_DEVICE_OUT_AUX_DIGITAL) {
- /*ADD audio_extn_passthru_is_passthrough_stream(out) check*/
- if ((audio_extn_passthru_is_enabled()) &&
- (!out->is_iec61937_info_available)) {
+ channels = platform_edid_get_max_channels(out->dev->platform);
+ if (audio_extn_passthru_is_enabled() &&
+ !out->is_iec61937_info_available &&
+ audio_extn_passthru_is_passthrough_stream(out)) {
audio_extn_passthru_update_stream_configuration(adev, out,
buffer, bytes);
out->is_iec61937_info_available = true;
+
+ if((out->format == AUDIO_FORMAT_DTS) ||
+ (out->format == AUDIO_FORMAT_DTS_HD)) {
+ ret = audio_extn_passthru_update_dts_stream_configuration(out,
+ buffer, bytes);
+ if (ret) {
+ if (ret != -ENOSYS) {
+ out->is_iec61937_info_available = false;
+ ALOGD("iec61937 transmission info not yet updated retry");
+ }
+ } else {
+ /* if stream has started and after that there is
+ * stream config change (iec transmission config)
+ * then trigger select_device to update backend configuration.
+ */
+ out->stream_config_changed = true;
+ pthread_mutex_lock(&adev->lock);
+ select_devices(adev, out->usecase);
+ pthread_mutex_unlock(&adev->lock);
+ out->stream_config_changed = false;
+ out->is_iec61937_info_available = true;
+ }
+ }
+
+ if ((channels < (int)audio_channel_count_from_out_mask(out->channel_mask)) &&
+ (out->compr_config.codec->compr_passthr == PASSTHROUGH) &&
+ (out->is_iec61937_info_available == true)) {
+ ALOGE("%s: ERROR: Unsupported channel config in passthrough mode", __func__);
+ ret = -EINVAL;
+ goto exit;
+ }
}
}
@@ -3515,10 +3801,6 @@
(audio_extn_a2dp_is_suspended())) {
if (!(out->devices & AUDIO_DEVICE_OUT_SPEAKER)) {
if (!(out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD)) {
- size_t bpf = audio_bytes_per_sample(out->format) *
- audio_channel_count_from_out_mask(out->channel_mask);
- if (bpf != 0)
- out->written += bytes / bpf;
ret = -EIO;
goto exit;
}
@@ -3596,6 +3878,9 @@
} else
ret = compress_write(out->compr, buffer, bytes);
+ if ((ret < 0 || ret == (ssize_t)bytes) && !out->non_blocking)
+ update_frames_written(out, bytes);
+
if (ret < 0)
ret = -errno;
ALOGVV("%s: writing buffer (%zu bytes) to compress device returned %zd", __func__, bytes, ret);
@@ -3610,8 +3895,6 @@
out_on_error(&out->stream.common);
return ret;
}
- if ( ret == (ssize_t)bytes && !out->non_blocking)
- out->written += bytes;
/* Call compr start only when non-zero bytes of data is there to be rendered */
if (!out->playback_started && ret > 0) {
@@ -3690,14 +3973,13 @@
if (ret < 0)
ret = -errno;
- else if (ret == 0 && (audio_bytes_per_sample(out->format) != 0))
- out->written += bytes / (out->config.channels * audio_bytes_per_sample(out->format));
- else
+ else if (ret > 0)
ret = -EINVAL;
}
}
exit:
+ update_frames_written(out, bytes);
if (-ENETRESET == ret) {
out->card_status = CARD_STATUS_OFFLINE;
}
@@ -3717,6 +3999,11 @@
if (!(out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD))
usleep((uint64_t)bytes * 1000000 / audio_stream_out_frame_size(stream) /
out_get_sample_rate(&out->stream.common));
+
+ if (audio_extn_passthru_is_passthrough_stream(out)) {
+ ALOGE("%s: write error, ret = %ld", __func__, ret);
+ return ret;
+ }
}
return bytes;
}
@@ -3987,6 +4274,177 @@
return -ENOSYS;
}
+static int out_stop(const struct audio_stream_out* stream)
+{
+ struct stream_out *out = (struct stream_out *)stream;
+ struct audio_device *adev = out->dev;
+ int ret = -ENOSYS;
+
+ ALOGV("%s", __func__);
+ pthread_mutex_lock(&adev->lock);
+ if (out->usecase == USECASE_AUDIO_PLAYBACK_MMAP && !out->standby &&
+ out->playback_started && out->pcm != NULL) {
+ pcm_stop(out->pcm);
+ ret = stop_output_stream(out);
+ out->playback_started = false;
+ }
+ pthread_mutex_unlock(&adev->lock);
+ return ret;
+}
+
+static int out_start(const struct audio_stream_out* stream)
+{
+ struct stream_out *out = (struct stream_out *)stream;
+ struct audio_device *adev = out->dev;
+ int ret = -ENOSYS;
+
+ ALOGV("%s", __func__);
+ pthread_mutex_lock(&adev->lock);
+ if (out->usecase == USECASE_AUDIO_PLAYBACK_MMAP && !out->standby &&
+ !out->playback_started && out->pcm != NULL) {
+ ret = start_output_stream(out);
+ if (ret == 0) {
+ out->playback_started = true;
+ }
+ }
+ pthread_mutex_unlock(&adev->lock);
+ return ret;
+}
+
+/*
+ * Modify config->period_count based on min_size_frames
+ */
+static void adjust_mmap_period_count(struct pcm_config *config, int32_t min_size_frames)
+{
+ int periodCountRequested = (min_size_frames + config->period_size - 1)
+ / config->period_size;
+ int periodCount = MMAP_PERIOD_COUNT_MIN;
+
+ ALOGV("%s original config.period_size = %d config.period_count = %d",
+ __func__, config->period_size, config->period_count);
+
+ while (periodCount < periodCountRequested && (periodCount * 2) < MMAP_PERIOD_COUNT_MAX) {
+ periodCount *= 2;
+ }
+ config->period_count = periodCount;
+
+ ALOGV("%s requested config.period_count = %d", __func__, config->period_count);
+}
+
+static int out_create_mmap_buffer(const struct audio_stream_out *stream,
+ int32_t min_size_frames,
+ struct audio_mmap_buffer_info *info)
+{
+ struct stream_out *out = (struct stream_out *)stream;
+ struct audio_device *adev = out->dev;
+ int ret = 0;
+ unsigned int offset1;
+ unsigned int frames1;
+ const char *step = "";
+ uint32_t mmap_size;
+
+ ALOGV("%s", __func__);
+ pthread_mutex_lock(&adev->lock);
+
+ if (info == NULL || min_size_frames == 0) {
+ ALOGE("%s: info = %p, min_size_frames = %d", __func__, info, min_size_frames);
+ ret = -EINVAL;
+ goto exit;
+ }
+ if (out->usecase != USECASE_AUDIO_PLAYBACK_MMAP || !out->standby) {
+ ALOGE("%s: usecase = %d, standby = %d", __func__, out->usecase, out->standby);
+ ret = -ENOSYS;
+ goto exit;
+ }
+ out->pcm_device_id = platform_get_pcm_device_id(out->usecase, PCM_PLAYBACK);
+ if (out->pcm_device_id < 0) {
+ ALOGE("%s: Invalid PCM device id(%d) for the usecase(%d)",
+ __func__, out->pcm_device_id, out->usecase);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ adjust_mmap_period_count(&out->config, min_size_frames);
+
+ ALOGV("%s: Opening PCM device card_id(%d) device_id(%d), channels %d",
+ __func__, adev->snd_card, out->pcm_device_id, out->config.channels);
+ out->pcm = pcm_open(adev->snd_card, out->pcm_device_id,
+ (PCM_OUT | PCM_MMAP | PCM_NOIRQ | PCM_MONOTONIC), &out->config);
+ if (out->pcm == NULL || !pcm_is_ready(out->pcm)) {
+ step = "open";
+ ret = -ENODEV;
+ goto exit;
+ }
+ ret = pcm_mmap_begin(out->pcm, &info->shared_memory_address, &offset1, &frames1);
+ if (ret < 0) {
+ step = "begin";
+ goto exit;
+ }
+ info->buffer_size_frames = pcm_get_buffer_size(out->pcm);
+ info->burst_size_frames = out->config.period_size;
+ ret = platform_get_mmap_data_fd(adev->platform,
+ out->pcm_device_id, 0 /*playback*/,
+ &info->shared_memory_fd,
+ &mmap_size);
+ if (ret < 0) {
+ step = "get_mmap_fd";
+ goto exit;
+ }
+ memset(info->shared_memory_address, 0, pcm_frames_to_bytes(out->pcm,
+ info->buffer_size_frames));
+
+ ret = pcm_mmap_commit(out->pcm, 0, MMAP_PERIOD_SIZE);
+ if (ret < 0) {
+ step = "commit";
+ goto exit;
+ }
+
+ out->standby = false;
+ ret = 0;
+
+ ALOGV("%s: got mmap buffer address %p info->buffer_size_frames %d",
+ __func__, info->shared_memory_address, info->buffer_size_frames);
+
+exit:
+ if (ret != 0) {
+ if (out->pcm == NULL) {
+ ALOGE("%s: %s - %d", __func__, step, ret);
+ } else {
+ ALOGE("%s: %s %s", __func__, step, pcm_get_error(out->pcm));
+ pcm_close(out->pcm);
+ out->pcm = NULL;
+ }
+ }
+ pthread_mutex_unlock(&adev->lock);
+ return ret;
+}
+
+static int out_get_mmap_position(const struct audio_stream_out *stream,
+ struct audio_mmap_position *position)
+{
+ struct stream_out *out = (struct stream_out *)stream;
+ ALOGVV("%s", __func__);
+ if (position == NULL) {
+ return -EINVAL;
+ }
+ if (out->usecase != USECASE_AUDIO_PLAYBACK_MMAP) {
+ return -ENOSYS;
+ }
+ if (out->pcm == NULL) {
+ return -ENOSYS;
+ }
+
+ struct timespec ts = { 0, 0 };
+ int ret = pcm_mmap_get_hw_ptr(out->pcm, (unsigned int *)&position->position_frames, &ts);
+ if (ret < 0) {
+ ALOGE("%s: %s", __func__, pcm_get_error(out->pcm));
+ return ret;
+ }
+ position->time_nanoseconds = ts.tv_sec*1000000000L + ts.tv_nsec;
+ return 0;
+}
+
+
/** audio_stream_in implementation **/
static uint32_t in_get_sample_rate(const struct audio_stream *stream)
{
@@ -4045,6 +4503,7 @@
int status = 0;
ALOGD("%s: enter: stream (%p) usecase(%d: %s)", __func__,
stream, in->usecase, use_case_table[in->usecase]);
+ bool do_stop = true;
lock_input_stream(in);
if (!in->standby && in->is_st_session) {
@@ -4060,11 +4519,18 @@
pthread_mutex_lock(&adev->lock);
in->standby = true;
if (in->usecase == USECASE_COMPRESS_VOIP_CALL) {
+ do_stop = false;
voice_extn_compress_voip_close_input_stream(stream);
ALOGD("VOIP input entered standby");
+ } else if (in->usecase == USECASE_AUDIO_RECORD_MMAP) {
+ do_stop = in->capture_started;
+ in->capture_started = false;
} else {
if (audio_extn_cin_attached_usecase(in->usecase))
audio_extn_cin_stop_input_stream(in);
+ }
+
+ if (do_stop) {
if (in->pcm) {
pcm_close(in->pcm);
in->pcm = NULL;
@@ -4249,6 +4715,11 @@
return bytes;
}
+ if (in->usecase == USECASE_AUDIO_RECORD_MMAP) {
+ ret = -ENOSYS;
+ goto exit;
+ }
+
if (in->standby) {
pthread_mutex_lock(&adev->lock);
if (in->usecase == USECASE_COMPRESS_VOIP_CALL)
@@ -4384,19 +4855,166 @@
return add_remove_audio_effect(stream, effect, false);
}
+static int in_stop(const struct audio_stream_in* stream)
+{
+ struct stream_in *in = (struct stream_in *)stream;
+ struct audio_device *adev = in->dev;
+
+ int ret = -ENOSYS;
+ ALOGV("%s", __func__);
+ pthread_mutex_lock(&adev->lock);
+ if (in->usecase == USECASE_AUDIO_RECORD_MMAP && !in->standby &&
+ in->capture_started && in->pcm != NULL) {
+ pcm_stop(in->pcm);
+ ret = stop_input_stream(in);
+ in->capture_started = false;
+ }
+ pthread_mutex_unlock(&adev->lock);
+ return ret;
+}
+
+static int in_start(const struct audio_stream_in* stream)
+{
+ struct stream_in *in = (struct stream_in *)stream;
+ struct audio_device *adev = in->dev;
+ int ret = -ENOSYS;
+
+ ALOGV("%s in %p", __func__, in);
+ pthread_mutex_lock(&adev->lock);
+ if (in->usecase == USECASE_AUDIO_RECORD_MMAP && !in->standby &&
+ !in->capture_started && in->pcm != NULL) {
+ if (!in->capture_started) {
+ ret = start_input_stream(in);
+ if (ret == 0) {
+ in->capture_started = true;
+ }
+ }
+ }
+ pthread_mutex_unlock(&adev->lock);
+ return ret;
+}
+
+static int in_create_mmap_buffer(const struct audio_stream_in *stream,
+ int32_t min_size_frames,
+ struct audio_mmap_buffer_info *info)
+{
+ struct stream_in *in = (struct stream_in *)stream;
+ struct audio_device *adev = in->dev;
+ int ret = 0;
+ unsigned int offset1 = 0;
+ unsigned int frames1 = 0;
+ const char *step = "";
+
+ pthread_mutex_lock(&adev->lock);
+ ALOGV("%s in %p", __func__, in);
+
+ if (info == NULL || min_size_frames == 0) {
+ ALOGE("%s invalid argument info %p min_size_frames %d", __func__, info, min_size_frames);
+ ret = -EINVAL;
+ goto exit;
+ }
+ if (in->usecase != USECASE_AUDIO_RECORD_MMAP || !in->standby) {
+ ALOGE("%s: usecase = %d, standby = %d", __func__, in->usecase, in->standby);
+ ALOGV("%s in %p", __func__, in);
+ ret = -ENOSYS;
+ goto exit;
+ }
+ in->pcm_device_id = platform_get_pcm_device_id(in->usecase, PCM_CAPTURE);
+ if (in->pcm_device_id < 0) {
+ ALOGE("%s: Invalid PCM device id(%d) for the usecase(%d)",
+ __func__, in->pcm_device_id, in->usecase);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ adjust_mmap_period_count(&in->config, min_size_frames);
+
+ ALOGV("%s: Opening PCM device card_id(%d) device_id(%d), channels %d",
+ __func__, adev->snd_card, in->pcm_device_id, in->config.channels);
+ in->pcm = pcm_open(adev->snd_card, in->pcm_device_id,
+ (PCM_IN | PCM_MMAP | PCM_NOIRQ | PCM_MONOTONIC), &in->config);
+ if (in->pcm == NULL || !pcm_is_ready(in->pcm)) {
+ step = "open";
+ ret = -ENODEV;
+ goto exit;
+ }
+
+ ret = pcm_mmap_begin(in->pcm, &info->shared_memory_address, &offset1, &frames1);
+ if (ret < 0) {
+ step = "begin";
+ goto exit;
+ }
+ info->buffer_size_frames = pcm_get_buffer_size(in->pcm);
+ info->burst_size_frames = in->config.period_size;
+ info->shared_memory_fd = pcm_get_poll_fd(in->pcm);
+
+ memset(info->shared_memory_address, 0, pcm_frames_to_bytes(in->pcm,
+ info->buffer_size_frames));
+
+ ret = pcm_mmap_commit(in->pcm, 0, MMAP_PERIOD_SIZE);
+ if (ret < 0) {
+ step = "commit";
+ goto exit;
+ }
+
+ in->standby = false;
+ ret = 0;
+
+ ALOGV("%s: got mmap buffer address %p info->buffer_size_frames %d",
+ __func__, info->shared_memory_address, info->buffer_size_frames);
+
+exit:
+ if (ret != 0) {
+ if (in->pcm == NULL) {
+ ALOGE("%s: %s - %d", __func__, step, ret);
+ } else {
+ ALOGE("%s: %s %s", __func__, step, pcm_get_error(in->pcm));
+ pcm_close(in->pcm);
+ in->pcm = NULL;
+ }
+ }
+ pthread_mutex_unlock(&adev->lock);
+ return ret;
+}
+
+static int in_get_mmap_position(const struct audio_stream_in *stream,
+ struct audio_mmap_position *position)
+{
+ struct stream_in *in = (struct stream_in *)stream;
+ ALOGVV("%s", __func__);
+ if (position == NULL) {
+ return -EINVAL;
+ }
+ if (in->usecase != USECASE_AUDIO_RECORD_MMAP) {
+ return -ENOSYS;
+ }
+ if (in->pcm == NULL) {
+ return -ENOSYS;
+ }
+ struct timespec ts = { 0, 0 };
+ int ret = pcm_mmap_get_hw_ptr(in->pcm, (unsigned int *)&position->position_frames, &ts);
+ if (ret < 0) {
+ ALOGE("%s: %s", __func__, pcm_get_error(in->pcm));
+ return ret;
+ }
+ position->time_nanoseconds = ts.tv_sec*1000000000L + ts.tv_nsec;
+ return 0;
+}
+
int adev_open_output_stream(struct audio_hw_device *dev,
- audio_io_handle_t handle,
- audio_devices_t devices,
- audio_output_flags_t flags,
- struct audio_config *config,
- struct audio_stream_out **stream_out,
- const char *address __unused)
+ audio_io_handle_t handle,
+ audio_devices_t devices,
+ audio_output_flags_t flags,
+ struct audio_config *config,
+ struct audio_stream_out **stream_out,
+ const char *address __unused)
{
struct audio_device *adev = (struct audio_device *)dev;
struct stream_out *out;
int ret = 0;
audio_format_t format;
struct adsp_hdlr_stream_cfg hdlr_stream_cfg;
+ bool is_direct_passthough = false;
*stream_out = NULL;
@@ -4437,6 +5055,10 @@
out->a2dp_compress_mute = false;
out->dynamic_pm_qos_enabled = 0;
+ if ((flags & AUDIO_OUTPUT_FLAG_BD) &&
+ (property_get_bool("audio.matrix.limiter.enable", false)))
+ platform_set_device_params(out, DEVICE_PARAM_LIMITER_ID, 1);
+
if (out->devices & AUDIO_DEVICE_OUT_AUX_DIGITAL &&
(flags & AUDIO_OUTPUT_FLAG_DIRECT)) {
pthread_mutex_lock(&adev->lock);
@@ -4455,7 +5077,7 @@
}
/* Init use case and pcm_config */
-#ifndef COMPRESS_VOIP_ENABLED
+#ifndef COMPRES_ENABLED
if (out->flags == (AUDIO_OUTPUT_FLAG_DIRECT | AUDIO_OUTPUT_FLAG_VOIP_RX) &&
(out->sample_rate == 8000 || out->sample_rate == 16000 ||
out->sample_rate == 32000 || out->sample_rate == 48000)) {
@@ -4468,7 +5090,7 @@
out->config.rate = out->sample_rate;
#else
- if ((out->dev->mode == AUDIO_MODE_IN_COMMUNICATION || voice_extn_compress_voip_is_active(out->dev)) &&
+ } else if ((out->dev->mode == AUDIO_MODE_IN_COMMUNICATION || voice_extn_compress_voip_is_active(out->dev)) &&
(out->flags == (AUDIO_OUTPUT_FLAG_DIRECT | AUDIO_OUTPUT_FLAG_VOIP_RX)) &&
(voice_extn_compress_voip_is_config_supported(config))) {
ret = voice_extn_compress_voip_open_output_stream(out);
@@ -4772,11 +5394,21 @@
channels = audio_channel_count_from_out_mask(out->channel_mask);
- if (out->flags & AUDIO_OUTPUT_FLAG_RAW) {
+ if (out->flags & AUDIO_OUTPUT_FLAG_INTERACTIVE) {
+ out->usecase = get_interactive_usecase(adev);
+ out->config = pcm_config_low_latency;
+ } else if (out->flags & AUDIO_OUTPUT_FLAG_RAW) {
out->usecase = USECASE_AUDIO_PLAYBACK_ULL;
out->realtime = may_use_noirq_mode(adev, USECASE_AUDIO_PLAYBACK_ULL,
out->flags);
out->config = out->realtime ? pcm_config_rt : pcm_config_low_latency;
+ } else if (out->flags & AUDIO_OUTPUT_FLAG_MMAP_NOIRQ) {
+ out->usecase = USECASE_AUDIO_PLAYBACK_MMAP;
+ out->config = pcm_config_mmap_playback;
+ out->stream.start = out_start;
+ out->stream.stop = out_stop;
+ out->stream.create_mmap_buffer = out_create_mmap_buffer;
+ 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);
@@ -4883,7 +5515,11 @@
out->stream.get_next_write_timestamp = out_get_next_write_timestamp;
out->stream.get_presentation_position = out_get_presentation_position;
- out->af_period_multiplier = out->realtime ? af_period_multiplier : 1;
+ if (out->realtime)
+ out->af_period_multiplier = af_period_multiplier;
+ else
+ out->af_period_multiplier = 1;
+
out->standby = 1;
/* out->muted = false; by calloc() */
/* out->written = 0; by calloc() */
@@ -4912,9 +5548,10 @@
audio_extn_dts_notify_playback_state(out->usecase, 0, out->sample_rate,
popcount(out->channel_mask), out->playback_started);
/* setup a channel for client <--> adsp communication for stream events */
+ is_direct_passthough = audio_extn_passthru_is_direct_passthrough(out);
if ((out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) ||
(out->flags & AUDIO_OUTPUT_FLAG_DIRECT_PCM) ||
- (audio_extn_ip_hdlr_intf_supported(config->format))) {
+ (audio_extn_ip_hdlr_intf_supported(config->format, is_direct_passthough, false))) {
hdlr_stream_cfg.pcm_device_id = platform_get_pcm_device_id(
out->usecase, PCM_PLAYBACK);
hdlr_stream_cfg.flags = out->flags;
@@ -4926,8 +5563,8 @@
out->adsp_hdlr_stream_handle = NULL;
}
}
- if (audio_extn_ip_hdlr_intf_supported(config->format)) {
- ret = audio_extn_ip_hdlr_intf_init(&out->ip_hdlr_handle, NULL, NULL);
+ if (audio_extn_ip_hdlr_intf_supported(config->format, is_direct_passthough, false)) {
+ ret = audio_extn_ip_hdlr_intf_init(&out->ip_hdlr_handle, NULL, NULL, adev, out->usecase);
if (ret < 0) {
ALOGE("%s: audio_extn_ip_hdlr_intf_init failed %d",__func__, ret);
out->ip_hdlr_handle = NULL;
@@ -4966,7 +5603,7 @@
out->adsp_hdlr_stream_handle = NULL;
}
- if (audio_extn_ip_hdlr_intf_supported(out->format) && out->ip_hdlr_handle) {
+ if (out->ip_hdlr_handle) {
audio_extn_ip_hdlr_intf_deinit(out->ip_hdlr_handle);
out->ip_hdlr_handle = NULL;
}
@@ -4992,6 +5629,9 @@
out->a2dp_compress_mute = false;
+ if (is_interactive_usecase(out->usecase))
+ free_interactive_usecase(adev, out->usecase);
+
if (out->convert_buffer != NULL) {
free(out->convert_buffer);
out->convert_buffer = NULL;
@@ -5409,16 +6049,26 @@
in->usecase = USECASE_AUDIO_RECORD;
if (config->sample_rate == LOW_LATENCY_CAPTURE_SAMPLE_RATE &&
- (flags & AUDIO_INPUT_FLAG_FAST) != 0) {
+ (flags & AUDIO_INPUT_FLAG_FAST) != 0) {
is_low_latency = true;
#if LOW_LATENCY_CAPTURE_USE_CASE
in->usecase = USECASE_AUDIO_RECORD_LOW_LATENCY;
#endif
in->realtime = may_use_noirq_mode(adev, in->usecase, in->flags);
}
-
in->format = config->format;
- if (in->realtime) {
+ if ((config->sample_rate == LOW_LATENCY_CAPTURE_SAMPLE_RATE) &&
+ ((in->flags & AUDIO_INPUT_FLAG_MMAP_NOIRQ) != 0)) {
+ in->realtime = 0;
+ in->usecase = USECASE_AUDIO_RECORD_MMAP;
+ in->config = pcm_config_mmap_capture;
+ 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->sample_rate = in->config.rate;
in->af_period_multiplier = af_period_multiplier;
@@ -5542,7 +6192,8 @@
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)) &&
+ (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) &&
@@ -5908,6 +6559,7 @@
adev->perf_lock_opts[0] = 0x101;
adev->perf_lock_opts[1] = 0x20E;
adev->perf_lock_opts_size = 2;
+ adev->dsp_bit_width_enforce_mode = 0;
/* Loads platform specific libraries dynamically */
adev->platform = platform_init(adev);
@@ -6020,6 +6672,8 @@
audio_extn_ds2_enable(adev);
*device = &adev->device.common;
+ adev->dsp_bit_width_enforce_mode =
+ adev_init_dsp_bit_width_enforce_mode(adev->mixer);
audio_extn_utils_update_streams_cfg_lists(adev->platform, adev->mixer,
&adev->streams_output_cfg_list,
diff --git a/hal/audio_hw.h b/hal/audio_hw.h
index 71de46a..f0b7077 100644
--- a/hal/audio_hw.h
+++ b/hal/audio_hw.h
@@ -118,6 +118,7 @@
USECASE_AUDIO_PLAYBACK_OFFLOAD8,
USECASE_AUDIO_PLAYBACK_OFFLOAD9,
USECASE_AUDIO_PLAYBACK_ULL,
+ USECASE_AUDIO_PLAYBACK_MMAP,
/* FM usecase */
USECASE_AUDIO_PLAYBACK_FM,
@@ -139,6 +140,7 @@
USECASE_AUDIO_RECORD_VOIP,
/* Voice usecase */
USECASE_VOICE_CALL,
+ USECASE_AUDIO_RECORD_MMAP,
/* Voice extension usecases */
USECASE_VOICE2_CALL,
@@ -168,6 +170,15 @@
USECASE_AUDIO_PLAYBACK_EXT_DISP_SILENCE,
USECASE_AUDIO_TRANSCODE_LOOPBACK,
+
+ USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM1,
+ USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM2,
+ USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM3,
+ USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM4,
+ USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM5,
+ USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM6,
+ USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM7,
+ USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM8,
AUDIO_USECASE_MAX
};
@@ -228,6 +239,8 @@
pthread_cond_t cond;
struct stream_config in_config;
struct stream_config out_config;
+ struct stream_app_type_cfg out_app_type_cfg;
+ char profile[MAX_STREAM_PROFILE_STR_LEN];
struct audio_device *dev;
void *adsp_hdlr_stream_handle;
void *ip_hdlr_handle;
@@ -310,6 +323,9 @@
char pm_qos_mixer_path[MAX_MIXER_PATH_LEN];
int dynamic_pm_qos_enabled;
+ bool stream_config_changed;
+ mix_matrix_params_t pan_scale_params;
+ mix_matrix_params_t downmix_params;
};
struct stream_in {
@@ -342,6 +358,7 @@
struct audio_device *dev;
card_status_t card_status;
+ int capture_started;
};
typedef enum {
@@ -479,8 +496,10 @@
bool asrc_mode_enabled;
qahwi_device_t qahwi_dev;
bool vr_audio_mode_enabled;
+ uint32_t dsp_bit_width_enforce_mode;
bool bt_sco_on;
struct audio_device_config_param *device_cfg_params;
+ unsigned int interactive_usecase_state;
};
int select_devices(struct audio_device *adev,
@@ -506,6 +525,8 @@
bool audio_is_dsd_native_stream_active(struct audio_device *adev);
+uint32_t adev_get_dsp_bit_width_enforce_mode();
+
int pcm_ioctl(struct pcm *pcm, int request, ...);
audio_usecase_t get_usecase_id_from_usecase_type(const struct audio_device *adev,
@@ -523,6 +544,8 @@
void adev_close_output_stream(struct audio_hw_device *dev __unused,
struct audio_stream_out *stream);
+bool is_interactive_usecase(audio_usecase_t uc_id);
+
#define LITERAL_TO_STRING(x) #x
#define CHECK(condition) LOG_ALWAYS_FATAL_IF(!(condition), "%s",\
__FILE__ ":" LITERAL_TO_STRING(__LINE__)\
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index cfb5486..f8c0aba 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -40,6 +40,10 @@
#include <dirent.h>
#include <linux/msm_audio.h>
+#if defined(PLATFORM_MSMFALCON)
+#include <sound/devdep_params.h>
+#endif
+
#ifdef DYNAMIC_LOG_ENABLED
#include <log_xml_parser.h>
#define LOG_MASK HAL_MOD_FILE_PLATFORM
@@ -336,6 +340,10 @@
[USECASE_AUDIO_HFP_SCO_WB] = {HFP_PCM_RX, HFP_SCO_RX},
[USECASE_VOICE_CALL] = {VOICE_CALL_PCM_DEVICE, VOICE_CALL_PCM_DEVICE},
[USECASE_VOICE2_CALL] = {VOICE2_CALL_PCM_DEVICE, VOICE2_CALL_PCM_DEVICE},
+ [USECASE_AUDIO_PLAYBACK_MMAP] = {MMAP_PLAYBACK_PCM_DEVICE,
+ MMAP_PLAYBACK_PCM_DEVICE},
+ [USECASE_AUDIO_RECORD_MMAP] = {MMAP_RECORD_PCM_DEVICE,
+ MMAP_RECORD_PCM_DEVICE},
[USECASE_VOLTE_CALL] = {VOLTE_CALL_PCM_DEVICE, VOLTE_CALL_PCM_DEVICE},
[USECASE_QCHAT_CALL] = {QCHAT_CALL_PCM_DEVICE, QCHAT_CALL_PCM_DEVICE},
[USECASE_VOWLAN_CALL] = {VOWLAN_CALL_PCM_DEVICE, VOWLAN_CALL_PCM_DEVICE},
@@ -369,6 +377,23 @@
[USECASE_AUDIO_PLAYBACK_VOIP] = {AUDIO_PLAYBACK_VOIP_PCM_DEVICE, AUDIO_PLAYBACK_VOIP_PCM_DEVICE},
[USECASE_AUDIO_RECORD_VOIP] = {AUDIO_RECORD_VOIP_PCM_DEVICE, AUDIO_RECORD_VOIP_PCM_DEVICE},
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM1] =
+ {PLAYBACK_INTERACTIVE_STRM_DEVICE1, PLAYBACK_INTERACTIVE_STRM_DEVICE1},
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM2] =
+ {PLAYBACK_INTERACTIVE_STRM_DEVICE2, PLAYBACK_INTERACTIVE_STRM_DEVICE2},
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM3] =
+ {PLAYBACK_INTERACTIVE_STRM_DEVICE3, PLAYBACK_INTERACTIVE_STRM_DEVICE3},
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM4] =
+ {PLAYBACK_INTERACTIVE_STRM_DEVICE4, PLAYBACK_INTERACTIVE_STRM_DEVICE4},
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM5] =
+ {PLAYBACK_INTERACTIVE_STRM_DEVICE5, PLAYBACK_INTERACTIVE_STRM_DEVICE5},
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM6] =
+ {PLAYBACK_INTERACTIVE_STRM_DEVICE6, PLAYBACK_INTERACTIVE_STRM_DEVICE6},
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM7] =
+ {PLAYBACK_INTERACTIVE_STRM_DEVICE7, PLAYBACK_INTERACTIVE_STRM_DEVICE7},
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM8] =
+ {PLAYBACK_INTERACTIVE_STRM_DEVICE8, PLAYBACK_INTERACTIVE_STRM_DEVICE8},
+
};
/* Array to store sound devices */
@@ -434,6 +459,8 @@
[SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT] = "voice-speaker-2-protected-vbat",
[SND_DEVICE_OUT_SPEAKER_PROTECTED_RAS] = "speaker-protected",
[SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT_RAS] = "speaker-protected-vbat",
+ [SND_DEVICE_OUT_SPEAKER_AND_BT_SCO] = "speaker-and-bt-sco",
+ [SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB] = "speaker-and-bt-sco-wb",
#ifdef RECORD_PLAY_CONCURRENCY
[SND_DEVICE_OUT_VOIP_HANDSET] = "voip-handset",
[SND_DEVICE_OUT_VOIP_SPEAKER] = "voip-speaker",
@@ -698,6 +725,8 @@
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_TTY_FULL_HEADPHONES)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET)},
+ {TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_AND_BT_SCO)},
+ {TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_TX)},
{TO_NAME_INDEX(SND_DEVICE_OUT_AFE_PROXY)},
{TO_NAME_INDEX(SND_DEVICE_OUT_USB_HEADSET)},
@@ -812,6 +841,7 @@
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_OFFLOAD7)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_OFFLOAD8)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_OFFLOAD9)},
+ {TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_MMAP)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_ULL)},
{TO_NAME_INDEX(USECASE_AUDIO_RECORD)},
{TO_NAME_INDEX(USECASE_AUDIO_RECORD_COMPRESS)},
@@ -819,6 +849,7 @@
{TO_NAME_INDEX(USECASE_AUDIO_RECORD_COMPRESS3)},
{TO_NAME_INDEX(USECASE_AUDIO_RECORD_COMPRESS4)},
{TO_NAME_INDEX(USECASE_AUDIO_RECORD_LOW_LATENCY)},
+ {TO_NAME_INDEX(USECASE_AUDIO_RECORD_MMAP)},
{TO_NAME_INDEX(USECASE_VOICE_CALL)},
{TO_NAME_INDEX(USECASE_VOICE2_CALL)},
{TO_NAME_INDEX(USECASE_VOLTE_CALL)},
@@ -902,6 +933,7 @@
#define PCM_OFFLOAD_PLATFORM_DELAY (30*1000LL)
#define LOW_LATENCY_PLATFORM_DELAY (13*1000LL)
#define ULL_PLATFORM_DELAY (6*1000LL)
+#define MMAP_PLATFORM_DELAY (3*1000LL)
static void update_interface(const char *snd_card_name) {
if (!strncmp(snd_card_name, "apq8009-tashalite-snd-card",
@@ -3174,6 +3206,9 @@
snd_device = voice_get_incall_rec_snd_device(usecase->in_snd_device);
else if ((usecase->type == PCM_HFP_CALL) || (usecase->type == PCM_CAPTURE))
snd_device = usecase->in_snd_device;
+ else if (usecase->type == TRANSCODE_LOOPBACK)
+ snd_device = usecase->out_snd_device;
+
acdb_dev_id = acdb_device_table[platform_get_spkr_prot_snd_device(snd_device)];
if (platform_split_snd_device(platform, snd_device, &num_devices,
@@ -3564,6 +3599,18 @@
new_snd_devices[0] = SND_DEVICE_OUT_SPEAKER;
new_snd_devices[1] = SND_DEVICE_OUT_USB_HEADSET;
ret = 0;
+ } else if (snd_device == SND_DEVICE_OUT_SPEAKER_AND_BT_SCO &&
+ !platform_check_backends_match(SND_DEVICE_OUT_SPEAKER, SND_DEVICE_OUT_BT_SCO)) {
+ *num_devices = 2;
+ new_snd_devices[0] = SND_DEVICE_OUT_SPEAKER;
+ new_snd_devices[1] = SND_DEVICE_OUT_BT_SCO;
+ ret = 0;
+ } else if (snd_device == SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB &&
+ !platform_check_backends_match(SND_DEVICE_OUT_SPEAKER, SND_DEVICE_OUT_BT_SCO_WB)) {
+ *num_devices = 2;
+ new_snd_devices[0] = SND_DEVICE_OUT_SPEAKER;
+ new_snd_devices[1] = SND_DEVICE_OUT_BT_SCO_WB;
+ ret = 0;
} else if (SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP == snd_device) {
*num_devices = 2;
new_snd_devices[0] = SND_DEVICE_OUT_SPEAKER;
@@ -3711,6 +3758,11 @@
} else if ((devices & AUDIO_DEVICE_OUT_SPEAKER) &&
(devices & AUDIO_DEVICE_OUT_ALL_A2DP)) {
snd_device = SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP;
+ } else if ((devices & AUDIO_DEVICE_OUT_ALL_SCO) &&
+ ((devices & ~AUDIO_DEVICE_OUT_ALL_SCO) == AUDIO_DEVICE_OUT_SPEAKER)) {
+ snd_device = adev->bt_wb_speech_enabled ?
+ SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB :
+ SND_DEVICE_OUT_SPEAKER_AND_BT_SCO;
} else {
ALOGE("%s: Invalid combo device(%#x)", __func__, devices);
goto exit;
@@ -5024,6 +5076,8 @@
return PCM_OFFLOAD_PLATFORM_DELAY;
case USECASE_AUDIO_PLAYBACK_ULL:
return ULL_PLATFORM_DELAY;
+ case USECASE_AUDIO_PLAYBACK_MMAP:
+ return MMAP_PLATFORM_DELAY;
default:
return 0;
}
@@ -5553,12 +5607,11 @@
__func__, DEFAULT_HDMI_OUT_CHANNELS);
channels = DEFAULT_HDMI_OUT_CHANNELS;
}
-
- if ((usecase->stream.out->format == AUDIO_FORMAT_E_AC3) ||
+ if (((usecase->stream.out->format == AUDIO_FORMAT_E_AC3) ||
(usecase->stream.out->format == AUDIO_FORMAT_E_AC3_JOC) ||
- (usecase->stream.out->format == AUDIO_FORMAT_DOLBY_TRUEHD)) {
- sample_rate = sample_rate * 4 ;
-
+ (usecase->stream.out->format == AUDIO_FORMAT_DOLBY_TRUEHD))
+ && (usecase->stream.out->compr_config.codec->compr_passthr == PASSTHROUGH)) {
+ sample_rate = sample_rate * 4;
if (sample_rate > HDMI_PASSTHROUGH_MAX_SAMPLE_RATE)
sample_rate = HDMI_PASSTHROUGH_MAX_SAMPLE_RATE;
}
@@ -5858,6 +5911,10 @@
backend_cfg.format = usecase->stream.out->format;
backend_cfg.channels = audio_channel_count_from_out_mask(usecase->stream.out->channel_mask);
}
+ /* enforce AFE bitwidth mode via backend_cfg */
+ if (audio_extn_is_dsp_bit_width_enforce_mode_supported(usecase->stream.out->flags) &&
+ (adev->dsp_bit_width_enforce_mode > backend_cfg.bit_width))
+ backend_cfg.bit_width = adev->dsp_bit_width_enforce_mode;
/*this is populated by check_codec_backend_cfg hence set default value to false*/
backend_cfg.passthrough_enabled = false;
@@ -6161,6 +6218,147 @@
*length = msm_be_id_array_len;
}
+int platform_set_stream_pan_scale_params(void *platform,
+ int snd_id,
+ struct mix_matrix_params mm_params)
+{
+ struct platform_data *my_data = (struct platform_data *)platform;
+ struct audio_device *adev = my_data->adev;
+ struct mixer_ctl *ctl = NULL;
+ char mixer_ctl_name[MIXER_PATH_MAX_LENGTH] = {0};
+ int ret = 0;
+ int iter_i = 0;
+ int iter_j = 0;
+ int length = 0;
+ int pan_scale_data[MAX_LENGTH_MIXER_CONTROL_IN_INT] = {0};
+
+ if (sizeof(mm_params) > MAX_LENGTH_MIXER_CONTROL_IN_INT) {
+ ret = -EINVAL;
+ goto end;
+ }
+
+ snprintf(mixer_ctl_name, sizeof(mixer_ctl_name),
+ "Audio Stream %d Pan Scale Control", snd_id);
+ ALOGD("%s mixer_ctl_name:%s", __func__, mixer_ctl_name);
+
+ ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
+ if (!ctl) {
+ ALOGE("%s: Could not get ctl for mixer cmd - %s",
+ __func__, mixer_ctl_name);
+ ret = -EINVAL;
+ goto end;
+ }
+ pan_scale_data[length++] = mm_params.num_output_channels;
+ pan_scale_data[length++] = mm_params.num_input_channels;
+
+ pan_scale_data[length++] = mm_params.has_output_channel_map;
+ if (mm_params.has_output_channel_map &&
+ mm_params.num_output_channels <= MAX_CHANNELS_SUPPORTED &&
+ mm_params.num_output_channels > 0)
+ for (iter_i = 0; iter_i < mm_params.num_output_channels; iter_i++)
+ pan_scale_data[length++] = mm_params.output_channel_map[iter_i];
+ else {
+ ret = -EINVAL;
+ goto end;
+ }
+
+ pan_scale_data[length++] = mm_params.has_input_channel_map;
+ if (mm_params.has_input_channel_map &&
+ mm_params.num_input_channels <= MAX_CHANNELS_SUPPORTED &&
+ mm_params.num_input_channels > 0)
+ for (iter_i = 0; iter_i < mm_params.num_input_channels; iter_i++)
+ pan_scale_data[length++] = mm_params.input_channel_map[iter_i];
+ else {
+ ret = -EINVAL;
+ goto end;
+ }
+
+ pan_scale_data[length++] = mm_params.has_mixer_coeffs;
+ if (mm_params.has_mixer_coeffs)
+ for (iter_i = 0; iter_i < mm_params.num_output_channels; iter_i++)
+ for (iter_j = 0; iter_j < mm_params.num_input_channels; iter_j++)
+ pan_scale_data[length++] =
+ mm_params.mixer_coeffs[iter_i][iter_j];
+
+ ret = mixer_ctl_set_array(ctl, pan_scale_data, length);
+end:
+ return ret;
+}
+
+int platform_set_stream_downmix_params(void *platform,
+ int snd_id,
+ snd_device_t snd_device,
+ struct mix_matrix_params mm_params)
+{
+ struct platform_data *my_data = (struct platform_data *)platform;
+ struct audio_device *adev = my_data->adev;
+ struct mixer_ctl *ctl;
+ char mixer_ctl_name[MIXER_PATH_MAX_LENGTH] = {0};
+ int downmix_param_data[MAX_LENGTH_MIXER_CONTROL_IN_INT] = {0};
+ int ret = 0;
+ int iter_i = 0;
+ int iter_j = 0;
+ int length = 0;
+ int be_idx = 0;
+
+ if ((sizeof(mm_params) +
+ sizeof(be_idx)) >
+ MAX_LENGTH_MIXER_CONTROL_IN_INT) {
+ ret = -EINVAL;
+ goto end;
+ }
+
+ snprintf(mixer_ctl_name, sizeof(mixer_ctl_name),
+ "Audio Device %d Downmix Control", snd_id);
+ ALOGD("%s mixer_ctl_name:%s", __func__, mixer_ctl_name);
+
+ ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
+ if (!ctl) {
+ ALOGE("%s: Could not get ctl for mixer cmd - %s",
+ __func__, mixer_ctl_name);
+ ret = -EINVAL;
+ goto end;
+ }
+
+ be_idx = platform_get_snd_device_backend_index(snd_device);
+ downmix_param_data[length] = be_idx;
+ downmix_param_data[length++] = mm_params.num_output_channels;
+ downmix_param_data[length++] = mm_params.num_input_channels;
+
+ downmix_param_data[length++] = mm_params.has_output_channel_map;
+ if (mm_params.has_output_channel_map &&
+ mm_params.num_output_channels <= MAX_CHANNELS_SUPPORTED &&
+ mm_params.num_output_channels > 0)
+ for (iter_i = 0; iter_i < mm_params.num_output_channels; iter_i++)
+ downmix_param_data[length++] = mm_params.output_channel_map[iter_i];
+ else {
+ ret = -EINVAL;
+ goto end;
+ }
+
+ downmix_param_data[length++] = mm_params.has_input_channel_map;
+ if (mm_params.has_input_channel_map &&
+ mm_params.num_input_channels <= MAX_CHANNELS_SUPPORTED &&
+ mm_params.num_input_channels > 0)
+ for (iter_i = 0; iter_i < mm_params.num_input_channels; iter_i++)
+ downmix_param_data[length++] = mm_params.input_channel_map[iter_i];
+ else {
+ ret = -EINVAL;
+ goto end;
+ }
+
+ downmix_param_data[length++] = mm_params.has_mixer_coeffs;
+ if (mm_params.has_mixer_coeffs)
+ for (iter_i = 0; iter_i < mm_params.num_output_channels; iter_i++)
+ for (iter_j = 0; iter_j < mm_params.num_input_channels; iter_j++)
+ downmix_param_data[length++] =
+ mm_params.mixer_coeffs[iter_i][iter_j];
+
+ ret = mixer_ctl_set_array(ctl, downmix_param_data, length);
+end:
+ return ret;
+}
+
int platform_set_stream_channel_map(void *platform, audio_channel_mask_t channel_mask,
int snd_id, uint8_t *input_channel_map)
{
@@ -7220,3 +7418,40 @@
return MAX_CODEC_BACKENDS;
}
+
+#if defined(PLATFORM_MSMFALCON)
+int platform_get_mmap_data_fd(void *platform, int fe_dev, int dir, int *fd,
+ uint32_t *size)
+{
+ struct platform_data *my_data = (struct platform_data *)platform;
+ struct audio_device *adev = my_data->adev;
+ int hw_fd = -1;
+ char dev_name[128];
+ struct snd_pcm_mmap_fd mmap_fd;
+ memset(&mmap_fd, 0, sizeof(mmap_fd));
+ mmap_fd.dir = dir;
+ snprintf(dev_name, sizeof(dev_name), "/dev/snd/hwC%uD%u",
+ adev->snd_card, HWDEP_FE_BASE+fe_dev);
+ hw_fd = open(dev_name, O_RDONLY);
+ if (hw_fd < 0) {
+ ALOGE("fe hw dep node open %d/%d failed", adev->snd_card, fe_dev);
+ return -1;
+ }
+ if (ioctl(hw_fd, SNDRV_PCM_IOCTL_MMAP_DATA_FD, &mmap_fd) < 0) {
+ ALOGE("fe hw dep node ioctl failed");
+ close(hw_fd);
+ return -1;
+ }
+ *fd = mmap_fd.fd;
+ *size = mmap_fd.size;
+ close(hw_fd); // mmap_fd should still be valid
+ return 0;
+}
+#else
+int platform_get_mmap_data_fd(void *platform __unused, int fe_dev __unused,
+ int dir __unused, int *fd __unused,
+ uint32_t *size __unused)
+{
+ return -1;
+}
+#endif
diff --git a/hal/msm8916/platform.h b/hal/msm8916/platform.h
index 6aa4dc1..a53a38f 100644
--- a/hal/msm8916/platform.h
+++ b/hal/msm8916/platform.h
@@ -111,6 +111,8 @@
SND_DEVICE_OUT_BT_SCO_WB,
SND_DEVICE_OUT_BT_A2DP,
SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP,
+ SND_DEVICE_OUT_SPEAKER_AND_BT_SCO,
+ SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB,
SND_DEVICE_OUT_VOICE_TTY_FULL_HEADPHONES,
SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES,
SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET,
@@ -350,6 +352,8 @@
#define VOLTE_CALL_PCM_DEVICE 15
#define QCHAT_CALL_PCM_DEVICE 37
#define VOWLAN_CALL_PCM_DEVICE 16
+#define MMAP_PLAYBACK_PCM_DEVICE 2 // XXX: This must be overwritten
+#define MMAP_RECORD_PCM_DEVICE 2 // XXX: This must be overwritten
#define AFE_PROXY_PLAYBACK_PCM_DEVICE 7
#define AFE_PROXY_RECORD_PCM_DEVICE 8
@@ -357,6 +361,15 @@
#define TRANSCODE_LOOPBACK_RX_DEV_ID 43
#define TRANSCODE_LOOPBACK_TX_DEV_ID 44
+#define PLAYBACK_INTERACTIVE_STRM_DEVICE1 0
+#define PLAYBACK_INTERACTIVE_STRM_DEVICE2 1
+#define PLAYBACK_INTERACTIVE_STRM_DEVICE3 27
+#define PLAYBACK_INTERACTIVE_STRM_DEVICE4 45
+#define PLAYBACK_INTERACTIVE_STRM_DEVICE5 46
+#define PLAYBACK_INTERACTIVE_STRM_DEVICE6 47
+#define PLAYBACK_INTERACTIVE_STRM_DEVICE7 48
+#define PLAYBACK_INTERACTIVE_STRM_DEVICE8 49
+
#define PLATFORM_MAX_MIC_COUNT "input_mic_max_count"
#define PLATFORM_DEFAULT_MIC_COUNT 2
@@ -415,6 +428,7 @@
*/
#define DEVICE_PARAM_MUTE_ID 0
#define DEVICE_PARAM_LATENCY_ID 1
+#define DEVICE_PARAM_LIMITER_ID 2
#define ENUM_TO_STRING(X) #X
diff --git a/hal/msm8960/platform.c b/hal/msm8960/platform.c
index f2201db..43aeaed 100644
--- a/hal/msm8960/platform.c
+++ b/hal/msm8960/platform.c
@@ -1368,3 +1368,9 @@
{
return 0;
}
+
+int platform_get_mmap_data_fd(void *platform, int fe_dev, int dir, int *fd,
+ uint32_t *size)
+{
+ return -ENOSYS;
+}
diff --git a/hal/msm8974/hw_info.c b/hal/msm8974/hw_info.c
index 20c5390..970f160 100755
--- a/hal/msm8974/hw_info.c
+++ b/hal/msm8974/hw_info.c
@@ -211,7 +211,11 @@
};
static const snd_device_t tavil_qrd_variant_devices[] = {
- SND_DEVICE_OUT_SPEAKER
+ SND_DEVICE_OUT_SPEAKER,
+ SND_DEVICE_OUT_VOICE_SPEAKER,
+ SND_DEVICE_OUT_HANDSET,
+ SND_DEVICE_OUT_VOICE_HANDSET,
+ SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET,
};
static void update_hardware_info_8084(struct hardware_info *hw_info, const char *snd_card_name)
@@ -533,7 +537,7 @@
} else if(strstr(snd_card_name, "sdm845")) {
ALOGV("SDM845 - variant soundcard");
update_hardware_info_sdm845(hw_info, snd_card_name);
- } else if (strstr(snd_card_name, "sdm660")) {
+ } else if (strstr(snd_card_name, "sdm660") || strstr(snd_card_name, "sdm670")) {
ALOGV("Bear - variant soundcard");
update_hardware_info_bear(hw_info, snd_card_name);
} else {
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 98b275b..ec99fe3 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -75,6 +75,9 @@
#endif
#include <linux/msm_audio.h>
+#if defined (PLATFORM_MSM8998) || (PLATFORM_SDM845) || (PLATFORM_SDM670)
+#include <sound/devdep_params.h>
+#endif
#define LIB_ACDB_LOADER "libacdbloader.so"
#define CVD_VERSION_MIXER_CTL "CVD Version"
@@ -311,6 +314,10 @@
[USECASE_AUDIO_HFP_SCO] = {HFP_PCM_RX, HFP_SCO_RX},
[USECASE_AUDIO_HFP_SCO_WB] = {HFP_PCM_RX, HFP_SCO_RX},
[USECASE_VOICE_CALL] = {VOICE_CALL_PCM_DEVICE, VOICE_CALL_PCM_DEVICE},
+ [USECASE_AUDIO_PLAYBACK_MMAP] = {MMAP_PLAYBACK_PCM_DEVICE,
+ MMAP_PLAYBACK_PCM_DEVICE},
+ [USECASE_AUDIO_RECORD_MMAP] = {MMAP_RECORD_PCM_DEVICE,
+ MMAP_RECORD_PCM_DEVICE},
[USECASE_VOICE2_CALL] = {VOICE2_CALL_PCM_DEVICE, VOICE2_CALL_PCM_DEVICE},
[USECASE_VOLTE_CALL] = {VOLTE_CALL_PCM_DEVICE, VOLTE_CALL_PCM_DEVICE},
[USECASE_QCHAT_CALL] = {QCHAT_CALL_PCM_DEVICE, QCHAT_CALL_PCM_DEVICE},
@@ -348,6 +355,22 @@
[USECASE_AUDIO_PLAYBACK_VOIP] = {AUDIO_PLAYBACK_VOIP_PCM_DEVICE, AUDIO_PLAYBACK_VOIP_PCM_DEVICE},
[USECASE_AUDIO_RECORD_VOIP] = {AUDIO_RECORD_VOIP_PCM_DEVICE, AUDIO_RECORD_VOIP_PCM_DEVICE},
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM1] =
+ {PLAYBACK_INTERACTIVE_STRM_DEVICE1, PLAYBACK_INTERACTIVE_STRM_DEVICE1},
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM2] =
+ {PLAYBACK_INTERACTIVE_STRM_DEVICE2, PLAYBACK_INTERACTIVE_STRM_DEVICE2},
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM3] =
+ {PLAYBACK_INTERACTIVE_STRM_DEVICE3, PLAYBACK_INTERACTIVE_STRM_DEVICE3},
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM4] =
+ {PLAYBACK_INTERACTIVE_STRM_DEVICE4, PLAYBACK_INTERACTIVE_STRM_DEVICE4},
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM5] =
+ {PLAYBACK_INTERACTIVE_STRM_DEVICE5, PLAYBACK_INTERACTIVE_STRM_DEVICE5},
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM6] =
+ {PLAYBACK_INTERACTIVE_STRM_DEVICE6, PLAYBACK_INTERACTIVE_STRM_DEVICE6},
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM7] =
+ {PLAYBACK_INTERACTIVE_STRM_DEVICE7, PLAYBACK_INTERACTIVE_STRM_DEVICE7},
+ [USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM8] =
+ {PLAYBACK_INTERACTIVE_STRM_DEVICE8, PLAYBACK_INTERACTIVE_STRM_DEVICE8},
};
@@ -415,6 +438,8 @@
[SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT] = "voice-speaker-2-protected-vbat",
[SND_DEVICE_OUT_SPEAKER_PROTECTED_RAS] = "speaker-protected",
[SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT_RAS] = "speaker-protected-vbat",
+ [SND_DEVICE_OUT_SPEAKER_AND_BT_SCO] = "speaker-and-bt-sco",
+ [SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB] = "speaker-and-bt-sco-wb",
/* Capture sound devices */
[SND_DEVICE_IN_HANDSET_MIC] = "handset-mic",
@@ -674,6 +699,8 @@
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_TTY_FULL_HEADPHONES)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET)},
+ {TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_AND_BT_SCO)},
+ {TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_TTY_FULL_USB)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_TTY_VCO_USB)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_TX)},
@@ -790,12 +817,14 @@
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_OFFLOAD7)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_OFFLOAD8)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_OFFLOAD9)},
+ {TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_MMAP)},
{TO_NAME_INDEX(USECASE_AUDIO_RECORD)},
{TO_NAME_INDEX(USECASE_AUDIO_RECORD_COMPRESS)},
{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_LOW_LATENCY)},
+ {TO_NAME_INDEX(USECASE_AUDIO_RECORD_MMAP)},
{TO_NAME_INDEX(USECASE_VOICE_CALL)},
{TO_NAME_INDEX(USECASE_VOICE2_CALL)},
{TO_NAME_INDEX(USECASE_VOLTE_CALL)},
@@ -929,11 +958,11 @@
static int msm_be_id_array_len =
sizeof(msm_device_to_be_id) / sizeof(msm_device_to_be_id[0]);
-
#define DEEP_BUFFER_PLATFORM_DELAY (29*1000LL)
#define PCM_OFFLOAD_PLATFORM_DELAY (30*1000LL)
#define LOW_LATENCY_PLATFORM_DELAY (13*1000LL)
#define ULL_PLATFORM_DELAY (6*1000LL)
+#define MMAP_PLATFORM_DELAY (3*1000LL)
static void update_codec_type_and_interface(struct platform_data * my_data, const char *snd_card_name) {
@@ -1642,6 +1671,11 @@
ALOGD("using tasha ACDB files for tasha-lite");
return "sdm660-tasha-snd-card";
}
+ if(!strncmp(snd_card_name, "sdm670-tashalite-snd-card",
+ sizeof("sdm670-tashalite-snd-card"))) {
+ ALOGD("using tasha ACDB files for tasha-lite");
+ return "sdm670-tasha-snd-card";
+ }
return snd_card_name;
}
@@ -2228,7 +2262,8 @@
strdup("SLIM_5_RX SampleRate");
if (!my_data->is_slimbus_interface) {
- if (!strncmp(snd_card_name, "sdm660", strlen("sdm660"))) {
+ if (!strncmp(snd_card_name, "sdm660", strlen("sdm660")) ||
+ !strncmp(snd_card_name, "sdm670", strlen("sdm670"))) {
my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].bitwidth_mixer_ctl =
strdup("INT4_MI2S_RX Format");
@@ -2940,6 +2975,8 @@
snd_device = voice_get_incall_rec_snd_device(usecase->in_snd_device);
else if ((usecase->type == PCM_HFP_CALL) || (usecase->type == PCM_CAPTURE))
snd_device = usecase->in_snd_device;
+ else if (usecase->type == TRANSCODE_LOOPBACK)
+ snd_device = usecase->out_snd_device;
acdb_dev_id = acdb_device_table[platform_get_spkr_prot_snd_device(snd_device)];
if (acdb_dev_id < 0) {
@@ -3336,6 +3373,18 @@
new_snd_devices[0] = SND_DEVICE_OUT_SPEAKER;
new_snd_devices[1] = SND_DEVICE_OUT_USB_HEADSET;
ret = 0;
+ } else if (snd_device == SND_DEVICE_OUT_SPEAKER_AND_BT_SCO &&
+ !platform_check_backends_match(SND_DEVICE_OUT_SPEAKER, SND_DEVICE_OUT_BT_SCO)) {
+ *num_devices = 2;
+ new_snd_devices[0] = SND_DEVICE_OUT_SPEAKER;
+ new_snd_devices[1] = SND_DEVICE_OUT_BT_SCO;
+ ret = 0;
+ } else if (snd_device == SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB &&
+ !platform_check_backends_match(SND_DEVICE_OUT_SPEAKER, SND_DEVICE_OUT_BT_SCO_WB)) {
+ *num_devices = 2;
+ new_snd_devices[0] = SND_DEVICE_OUT_SPEAKER;
+ new_snd_devices[1] = SND_DEVICE_OUT_BT_SCO_WB;
+ ret = 0;
} else if (SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP == snd_device) {
*num_devices = 2;
new_snd_devices[0] = SND_DEVICE_OUT_SPEAKER;
@@ -3479,6 +3528,11 @@
} else if ((devices & AUDIO_DEVICE_OUT_SPEAKER) &&
(devices & AUDIO_DEVICE_OUT_ALL_A2DP)) {
snd_device = SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP;
+ } else if ((devices & AUDIO_DEVICE_OUT_ALL_SCO) &&
+ ((devices & ~AUDIO_DEVICE_OUT_ALL_SCO) == AUDIO_DEVICE_OUT_SPEAKER)) {
+ snd_device = adev->bt_wb_speech_enabled ?
+ SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB :
+ SND_DEVICE_OUT_SPEAKER_AND_BT_SCO;
} else {
ALOGE("%s: Invalid combo device(%#x)", __func__, devices);
goto exit;
@@ -4954,6 +5008,8 @@
return PCM_OFFLOAD_PLATFORM_DELAY;
case USECASE_AUDIO_PLAYBACK_ULL:
return ULL_PLATFORM_DELAY;
+ case USECASE_AUDIO_PLAYBACK_MMAP:
+ return MMAP_PLATFORM_DELAY;
default:
return 0;
}
@@ -5426,10 +5482,10 @@
__func__, DEFAULT_HDMI_OUT_CHANNELS);
channels = DEFAULT_HDMI_OUT_CHANNELS;
}
- if ((usecase->stream.out->format == AUDIO_FORMAT_E_AC3) ||
+ if (((usecase->stream.out->format == AUDIO_FORMAT_E_AC3) ||
(usecase->stream.out->format == AUDIO_FORMAT_E_AC3_JOC) ||
- (usecase->stream.out->format == AUDIO_FORMAT_DOLBY_TRUEHD)) {
-
+ (usecase->stream.out->format == AUDIO_FORMAT_DOLBY_TRUEHD))
+ && (usecase->stream.out->compr_config.codec->compr_passthr == PASSTHROUGH)) {
sample_rate = sample_rate * 4;
if (sample_rate > HDMI_PASSTHROUGH_MAX_SAMPLE_RATE)
sample_rate = HDMI_PASSTHROUGH_MAX_SAMPLE_RATE;
@@ -5707,6 +5763,9 @@
backend_cfg.format = usecase->stream.out->format;
backend_cfg.channels = audio_channel_count_from_out_mask(usecase->stream.out->channel_mask);
}
+ if (audio_extn_is_dsp_bit_width_enforce_mode_supported(usecase->stream.out->flags) &&
+ (adev->dsp_bit_width_enforce_mode > backend_cfg.bit_width))
+ backend_cfg.bit_width = adev->dsp_bit_width_enforce_mode;
/*this is populated by check_codec_backend_cfg hence set default value to false*/
backend_cfg.passthrough_enabled = false;
@@ -6007,6 +6066,147 @@
*length = msm_be_id_array_len;
}
+int platform_set_stream_pan_scale_params(void *platform,
+ int snd_id,
+ struct mix_matrix_params mm_params)
+{
+ struct platform_data *my_data = (struct platform_data *)platform;
+ struct audio_device *adev = my_data->adev;
+ struct mixer_ctl *ctl = NULL;
+ char mixer_ctl_name[MIXER_PATH_MAX_LENGTH] = {0};
+ int ret = 0;
+ int iter_i = 0;
+ int iter_j = 0;
+ int length = 0;
+ int *pan_scale_data = NULL;
+
+ snprintf(mixer_ctl_name, sizeof(mixer_ctl_name),
+ "Audio Stream %d Pan Scale Control", snd_id);
+ ALOGD("%s mixer_ctl_name:%s", __func__, mixer_ctl_name);
+
+ ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
+ if (!ctl) {
+ ALOGE("%s: Could not get ctl for mixer cmd - %s",
+ __func__, mixer_ctl_name);
+ ret = -EINVAL;
+ goto end;
+ }
+ pan_scale_data = (int* ) calloc(1, sizeof(mm_params));
+ if (!pan_scale_data) {
+ ret = -ENOMEM;
+ goto end;
+ }
+ pan_scale_data[length++] = mm_params.num_output_channels;
+ pan_scale_data[length++] = mm_params.num_input_channels;
+
+ pan_scale_data[length++] = mm_params.has_output_channel_map;
+ if (mm_params.has_output_channel_map &&
+ mm_params.num_output_channels <= MAX_CHANNELS_SUPPORTED &&
+ mm_params.num_output_channels > 0)
+ for (iter_i = 0; iter_i < mm_params.num_output_channels; iter_i++)
+ pan_scale_data[length++] = mm_params.output_channel_map[iter_i];
+ else {
+ ret = -EINVAL;
+ goto end;
+ }
+
+ pan_scale_data[length++] = mm_params.has_input_channel_map;
+ if (mm_params.has_input_channel_map &&
+ mm_params.num_input_channels <= MAX_CHANNELS_SUPPORTED &&
+ mm_params.num_input_channels > 0)
+ for (iter_i = 0; iter_i < mm_params.num_input_channels; iter_i++)
+ pan_scale_data[length++] = mm_params.input_channel_map[iter_i];
+ else {
+ ret = -EINVAL;
+ goto end;
+ }
+ pan_scale_data[length++] = mm_params.has_mixer_coeffs;
+ if (mm_params.has_mixer_coeffs)
+ for (iter_i = 0; iter_i < mm_params.num_output_channels; iter_i++)
+ for (iter_j = 0; iter_j < mm_params.num_input_channels; iter_j++)
+ pan_scale_data[length++] =
+ mm_params.mixer_coeffs[iter_i][iter_j];
+
+ ret = mixer_ctl_set_array(ctl, pan_scale_data, length);
+end:
+ if (pan_scale_data)
+ free(pan_scale_data);
+ return ret;
+}
+
+int platform_set_stream_downmix_params(void *platform,
+ int snd_id,
+ snd_device_t snd_device,
+ struct mix_matrix_params mm_params)
+{
+ struct platform_data *my_data = (struct platform_data *)platform;
+ struct audio_device *adev = my_data->adev;
+ struct mixer_ctl *ctl;
+ char mixer_ctl_name[MIXER_PATH_MAX_LENGTH] = {0};
+ int *downmix_param_data = NULL;
+ int ret = 0;
+ int iter_i = 0;
+ int iter_j = 0;
+ int length = 0;
+ int be_idx = 0;
+
+ snprintf(mixer_ctl_name, sizeof(mixer_ctl_name),
+ "Audio Device %d Downmix Control", snd_id);
+ ALOGD("%s mixer_ctl_name:%s", __func__, mixer_ctl_name);
+
+ ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
+ if (!ctl) {
+ ALOGE("%s: Could not get ctl for mixer cmd - %s",
+ __func__, mixer_ctl_name);
+ ret = -EINVAL;
+ }
+
+ downmix_param_data = (int* ) calloc(1, sizeof(mm_params) + sizeof(be_idx));
+ if (!downmix_param_data) {
+ ret = -ENOMEM;
+ goto end;
+ }
+ be_idx = platform_get_snd_device_backend_index(snd_device);
+ downmix_param_data[length++] = be_idx;
+ downmix_param_data[length++] = mm_params.num_output_channels;
+ downmix_param_data[length++] = mm_params.num_input_channels;
+
+ downmix_param_data[length++] = mm_params.has_output_channel_map;
+ if (mm_params.has_output_channel_map &&
+ mm_params.num_output_channels <= MAX_CHANNELS_SUPPORTED &&
+ mm_params.num_output_channels > 0)
+ for (iter_i = 0; iter_i < mm_params.num_output_channels; iter_i++)
+ downmix_param_data[length++] = mm_params.output_channel_map[iter_i];
+ else {
+ ret = -EINVAL;
+ goto end;
+ }
+
+ downmix_param_data[length++] = mm_params.has_input_channel_map;
+ if (mm_params.has_input_channel_map &&
+ mm_params.num_input_channels <= MAX_CHANNELS_SUPPORTED &&
+ mm_params.num_input_channels > 0)
+ for (iter_i = 0; iter_i < mm_params.num_input_channels; iter_i++)
+ downmix_param_data[length++] = mm_params.input_channel_map[iter_i];
+ else {
+ ret = -EINVAL;
+ goto end;
+ }
+
+ downmix_param_data[length++] = mm_params.has_mixer_coeffs;
+ if (mm_params.has_mixer_coeffs)
+ for (iter_i = 0; iter_i < mm_params.num_output_channels; iter_i++)
+ for (iter_j = 0; iter_j < mm_params.num_input_channels; iter_j++)
+ downmix_param_data[length++] =
+ mm_params.mixer_coeffs[iter_i][iter_j];
+
+ ret = mixer_ctl_set_array(ctl, downmix_param_data, length);
+end:
+ if (downmix_param_data)
+ free(downmix_param_data);
+ return ret;
+}
+
int platform_set_stream_channel_map(void *platform, audio_channel_mask_t channel_mask,
int snd_id, uint8_t *input_channel_map)
{
@@ -7000,3 +7200,40 @@
return MAX_CODEC_BACKENDS;
}
+
+#if defined (PLATFORM_MSM8998) || (PLATFORM_SDM845) || (PLATFORM_SDM670)
+int platform_get_mmap_data_fd(void *platform, int fe_dev, int dir, int *fd,
+ uint32_t *size)
+{
+ struct platform_data *my_data = (struct platform_data *)platform;
+ struct audio_device *adev = my_data->adev;
+ int hw_fd = -1;
+ char dev_name[128];
+ struct snd_pcm_mmap_fd mmap_fd;
+ memset(&mmap_fd, 0, sizeof(mmap_fd));
+ mmap_fd.dir = dir;
+ snprintf(dev_name, sizeof(dev_name), "/dev/snd/hwC%uD%u",
+ adev->snd_card, HWDEP_FE_BASE+fe_dev);
+ hw_fd = open(dev_name, O_RDONLY);
+ if (hw_fd < 0) {
+ ALOGE("fe hw dep node open %d/%d failed", adev->snd_card, fe_dev);
+ return -1;
+ }
+ if (ioctl(hw_fd, SNDRV_PCM_IOCTL_MMAP_DATA_FD, &mmap_fd) < 0) {
+ ALOGE("fe hw dep node ioctl failed");
+ close(hw_fd);
+ return -1;
+ }
+ *fd = mmap_fd.fd;
+ *size = mmap_fd.size;
+ close(hw_fd); // mmap_fd should still be valid
+ return 0;
+}
+#else
+int platform_get_mmap_data_fd(void *platform __unused, int fe_dev __unused,
+ int dir __unused, int *fd __unused,
+ uint32_t *size __unused)
+{
+ return -1;
+}
+#endif
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index 06f2cdc..b5bbbdf 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -106,6 +106,8 @@
SND_DEVICE_OUT_BT_SCO_WB,
SND_DEVICE_OUT_BT_A2DP,
SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP,
+ SND_DEVICE_OUT_SPEAKER_AND_BT_SCO,
+ SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB,
SND_DEVICE_OUT_VOICE_TTY_FULL_HEADPHONES,
SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES,
SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET,
@@ -296,7 +298,7 @@
/* Used in calculating fragment size for pcm offload */
-#define PCM_OFFLOAD_BUFFER_DURATION 40 /* 40 millisecs */
+#define PCM_OFFLOAD_BUFFER_DURATION 80 /* 80 millisecs */
/* MAX PCM fragment size cannot be increased further due
* to flinger's cblk size of 1mb,and it has to be a multiple of
@@ -351,11 +353,11 @@
#define PLAYBACK_OFFLOAD_DEVICE 9
// Direct_PCM
-#if defined (PLATFORM_MSM8994) || defined (PLATFORM_MSM8996) || defined (PLATFORM_APQ8084) || defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845)
+#if defined (PLATFORM_MSM8994) || defined (PLATFORM_MSM8996) || defined (PLATFORM_APQ8084) || defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) || defined (PLATFORM_SDM670)
#define PLAYBACK_OFFLOAD_DEVICE2 17
#endif
-#if defined (PLATFORM_APQ8084) || defined (PLATFORM_MSM8996) || defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845)
+#if defined (PLATFORM_APQ8084) || defined (PLATFORM_MSM8996) || defined (PLATFORM_MSM8998) || defined (PLATFORM_SDM845) || defined (PLATFORM_SDM670)
#define PLAYBACK_OFFLOAD_DEVICE3 18
#define PLAYBACK_OFFLOAD_DEVICE4 34
#define PLAYBACK_OFFLOAD_DEVICE5 35
@@ -385,6 +387,8 @@
#define EC_REF_RX "I2S_RX"
#else
#define LOWLATENCY_PCM_DEVICE 15
+#define MMAP_PLAYBACK_PCM_DEVICE 18
+#define MMAP_RECORD_PCM_DEVICE 18
#define EC_REF_RX "SLIM_RX"
#endif
@@ -463,6 +467,15 @@
#define TRANSCODE_LOOPBACK_RX_DEV_ID 43
#define TRANSCODE_LOOPBACK_TX_DEV_ID 44
+#define PLAYBACK_INTERACTIVE_STRM_DEVICE1 0
+#define PLAYBACK_INTERACTIVE_STRM_DEVICE2 1
+#define PLAYBACK_INTERACTIVE_STRM_DEVICE3 27
+#define PLAYBACK_INTERACTIVE_STRM_DEVICE4 45
+#define PLAYBACK_INTERACTIVE_STRM_DEVICE5 46
+#define PLAYBACK_INTERACTIVE_STRM_DEVICE6 47
+#define PLAYBACK_INTERACTIVE_STRM_DEVICE7 48
+#define PLAYBACK_INTERACTIVE_STRM_DEVICE8 49
+
#ifdef PLATFORM_APQ8084
#define FM_RX_VOLUME "Quat MI2S FM RX Volume"
#elif PLATFORM_MSM8994
@@ -533,6 +546,7 @@
*/
#define DEVICE_PARAM_MUTE_ID 0
#define DEVICE_PARAM_LATENCY_ID 1
+#define DEVICE_PARAM_LIMITER_ID 2
#define ENUM_TO_STRING(X) #X
diff --git a/hal/platform_api.h b/hal/platform_api.h
index 3c31c56..6f8cf7e 100644
--- a/hal/platform_api.h
+++ b/hal/platform_api.h
@@ -169,6 +169,13 @@
int snd_id);
int platform_set_stream_channel_map(void *platform, audio_channel_mask_t channel_mask,
int snd_id, uint8_t *input_channel_map);
+int platform_set_stream_pan_scale_params(void *platform,
+ int snd_id,
+ struct mix_matrix_params mm_params);
+int platform_set_stream_downmix_params(void *platform,
+ int snd_id,
+ snd_device_t snd_device,
+ struct mix_matrix_params mm_params);
int platform_set_edid_channels_configuration(void *platform, int channels);
unsigned char platform_map_to_edid_format(int format);
bool platform_is_edid_supported_format(void *platform, int format);
@@ -230,4 +237,6 @@
void platform_check_and_update_copp_sample_rate(void *platform, snd_device_t snd_device,
unsigned int stream_sr,int *sample_rate);
int platform_get_max_codec_backend();
+int platform_get_mmap_data_fd(void *platform, int dev, int dir,
+ int *fd, uint32_t *size);
#endif // AUDIO_PLATFORM_API_H
diff --git a/hdmi_in_test/Android.mk b/hdmi_in_test/Android.mk
new file mode 100644
index 0000000..0530372
--- /dev/null
+++ b/hdmi_in_test/Android.mk
@@ -0,0 +1,15 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := hdmi_in_test
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_OWNER := qti
+
+LOCAL_SRC_FILES := \
+ src/hdmi_in_event_test.c
+
+LOCAL_SHARED_LIBRARIES := \
+ liblog \
+ libcutils
+
+include $(BUILD_EXECUTABLE)
diff --git a/hdmi_in_test/Makefile.am b/hdmi_in_test/Makefile.am
new file mode 100644
index 0000000..34e4ff5
--- /dev/null
+++ b/hdmi_in_test/Makefile.am
@@ -0,0 +1,9 @@
+
+ACLOCAL_AMFLAGS = -I m4
+bin_PROGRAMS = hdmi_in_test
+pkgconfigdir = $(libdir)/pkgconfig
+
+hdmi_in_test_SOURCES = src/hdmi_in_event_test.c
+hdmi_in_test_CFLAGS = $(CFLAGS) -Wno-sign-compare -Werror
+hdmi_in_test_LDADD = -llog -lpthread
+
diff --git a/hdmi_in_test/src/edid.h b/hdmi_in_test/src/edid.h
new file mode 100644
index 0000000..8dc6b84
--- /dev/null
+++ b/hdmi_in_test/src/edid.h
@@ -0,0 +1,183 @@
+/*
+ * Copyright (c) 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.
+ */
+
+uint8_t default_edid[] = {
+/* Block 0 (EDID Base Block) */
+0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+/* Vendor Identification */
+0x45, 0x23, 0xDD, 0xDD, 0x01, 0x01, 0x01, 0x01, 0x01, 0x16,
+/* EDID Structure Version and Revision */
+0x01, 0x03,
+/* Display Parameters */
+0x80, 0x90, 0x51, 0x78, 0x0A,
+/* Color characteristics */
+0x0D, 0xC9, 0xA0, 0x57, 0x47, 0x98, 0x27, 0x12, 0x48, 0x4C,
+/* Established Timings */
+0x21, 0x08, 0x00,
+/* Standard Timings */
+0x81, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+/* Detailed Descriptors */
+0x02, 0x3A, 0x80, 0x18, 0x71, 0x38, 0x2D, 0x40,
+0x58, 0x2C,
+0x45, 0x00, 0xA0, 0x2A, 0x53, 0x00, 0x00, 0x1E,
+/* Detailed Descriptors */
+0x01, 0x1D, 0x00, 0x72, 0x51, 0xD0, 0x1E, 0x20,
+0x6E, 0x28, 0x55, 0x00, 0xA0, 0x2A, 0x53, 0x00,
+0x00, 0x1E,
+/* Monitor Descriptor */
+0x00, 0x00, 0x00, 0xFD, 0x00, 0x3A, 0x3E, 0x0F,
+0x46, 0x0F, 0x00, 0x0A, 0x20, 0x20, 0x20, 0x20,
+0x20, 0x20,
+/* Monitor Descriptor */
+0x00, 0x00, 0x00, 0xFC, 0x00, 0x54, 0x56, 0x0A,
+0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+0x20, 0x20,
+/* Extension Flag */
+0x01,
+/*checksum */
+0x9A,
+
+/* Block 1 (Extension Block) */
+/* Extension Header */
+0x02, 0x03, 0x37,
+/* Display supports */
+0xF0,
+/* Video Data Bock */
+0x4A, 0x10, 0x04, 0x05, 0x03, 0x02, 0x07, 0x06,
+0x20, 0x01, 0x3C,
+/* Audio Data Block */
+0x29,
+0x09, 0x07, 0x07, /* LPCM, max 2 ch, 48k, 44.1k, 32k */
+0x15, 0x07, 0x50, /* AC-3, max 6 ch, 48k, 44.1k, 32k, max bitrate 640*/
+0x3D, 0x07, 0x50, /* DTS, max 6ch, 48,44.1,32k, max br 640*/
+/* Speaker Allocation Data Block */
+0x83, 0x01, 0x00, 0x00,
+/* HDMI VSDB */
+/* no deep color, Max_TMDS_Clock = 165 MHz*/
+0x76, 0x03, 0x0C, 0x00, 0x30, 0x00, 0x80, 0x21,
+/* hdmi_video_present=1, 3d_present=1, 3d_multi_present=0,
+hdmi_vic_len=0, hdmi_3d_len=0xC*/
+0x2F, 0x88, 0x0C, 0x20, 0x90, 0x08, 0x10, 0x18,
+0x10, 0x28, 0x10, 0x78, 0x10, 0x06, 0x26,
+/* VCDB */
+0xE2, 0x00, 0x7B,
+/* Detailed Descriptor */
+0x01, 0x1D, 0x80, 0x18, 0x71, 0x1C, 0x16, 0x20,
+0x58, 0x2C, 0x25, 0x00, 0xA0, 0x2A, 0x53, 0x00,
+0x00, 0x9E,
+/* Detailed Descriptor */
+0x8C, 0x0A, 0xD0, 0x8A, 0x20, 0xE0, 0x2D, 0x10,
+0x10, 0x3E, 0x96, 0x00, 0xA0, 0x2A, 0x53, 0x00,
+0x00, 0x18,
+/* Detailed Descriptor */
+0x8C, 0x0A, 0xD0, 0x8A, 0x20, 0xE0, 0x2D, 0x10,
+0x10, 0x3E, 0x96, 0x00, 0x38, 0x2A, 0x43, 0x00,
+0x00, 0x18,
+/* Detailed Descriptor */
+0x8C, 0x0A, 0xA0, 0x14, 0x51, 0xF0, 0x16, 0x00,
+0x26, 0x7C, 0x43, 0x00, 0x38, 0x2A, 0x43, 0x00,
+0x00, 0x98,
+/* checksum */
+0x38
+};
+
+uint8_t edid_with_addtnl_snd_formats[] = {
+/* Block 0 (EDID Base Block) */
+0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+/* Vendor Identification */
+0x1E, 0x6D, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17,
+/* EDID Structure Version and Revision */
+0x01, 0x03,
+/* Display Parameters */
+0x80, 0xa0, 0x5A, 0x78, 0x0A,
+/* Color characteristics */
+0xEE, 0x91, 0xa3, 0x54, 0x4c, 0x99, 0x26, 0x0f, 0x50, 0x54,
+/* Established Timings */
+0xa1, 0x08, 0x00,
+
+0x31, 0x40, 0x45, 0x40, 0x61, 0x40, 0x71, 0x40,
+0x81, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+
+0x02, 0x3a, 0x80, 0x18, 0x71, 0x38, 0x2d, 0x40,
+0x58, 0x2c,
+0x45, 0x00, 0xa0, 0x5a, 0x00, 0x00, 0x00, 0x1e,
+
+0x66, 0x21, 0x50, 0xb0, 0x51, 0x00, 0x1b, 0x30,
+0x40, 0x70, 0x36, 0x00, 0xa0, 0x5a, 0x00, 0x00,
+0x00, 0x1e,
+
+0x00, 0x00, 0x00, 0xfd, 0x00, 0x3a, 0x3e, 0x1e,
+0x53, 0x10, 0x00, 0x0a, 0x20, 0x20, 0x20, 0x20,
+0x20, 0x20,
+
+0x00, 0x00, 0x00, 0xfc, 0x00, 0x4c, 0x47, 0x20,
+0x54, 0x56, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+0x20, 0x20,
+
+/* Extension Flag */
+0x01,
+/*checksum */
+0x42,
+
+/* Block 1 (Extension Block) */
+/* Extension Header */
+0x02, 0x03, 0x37,
+/* Display supports */
+0xF0,
+/* Video Data Bock */
+0x4E, 0x10, 0x9F, 0x04, 0x13, 0x05, 0x14, 0x03, 0x02, 0x12, 0x20, 0x21,
+0x22, 0x15, 0x01,
+
+/* Audio Data Block */
+0x2F,
+0x3D, 0x06, 0xC0,
+0x15, 0x07, 0x50,
+0x0F, 0x57, 0x07,
+0x57, 0x06, 0x00,
+0x5F, 0x7E, 0x01,
+
+/* Speaker Allocation Data Block */
+0x67, 0x03, 0x0C, 0x00,
+
+0x30, 0x00, 0x80, 0x1E, 0xE3, 0x05, 0x00, 0x00, 0x01,
+
+0x1D, 0x80, 0x18, 0x71, 0x1C, 0x16, 0x20, 0x58, 0x2C, 0x25, 0x00,
+0xA0, 0x5A, 0x00, 0x00, 0x00,
+0x9E, 0x01, 0x1D, 0x00, 0x80, 0x51, 0xD0, 0x1A, 0x20, 0x6E, 0x88,
+0x55, 0x00, 0xA0, 0x5A, 0x00,
+0x00, 0x00, 0x1A, 0x02, 0x3A, 0x80, 0x18, 0x71, 0x38, 0x2D, 0x40,
+0x58, 0x2C, 0x45, 0x00, 0xA0,
+0x5A, 0x00, 0x00, 0x00, 0x1E, 0x66, 0x21, 0x50, 0xB0, 0x51, 0x00,
+0x1B, 0x30, 0x40, 0x70, 0x36,
+0x00, 0xA0, 0x5A, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00,
+/* checksum */
+0xFB
+};
diff --git a/hdmi_in_test/src/hdmi_in_event_test.c b/hdmi_in_test/src/hdmi_in_event_test.c
new file mode 100644
index 0000000..1c4d91b
--- /dev/null
+++ b/hdmi_in_test/src/hdmi_in_event_test.c
@@ -0,0 +1,238 @@
+/*
+ * Copyright (c) 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.
+ */
+
+/* Test app to capture event updates from kernel */
+/*#define LOG_NDEBUG 0*/
+#include <fcntl.h>
+#include <linux/netlink.h>
+#include <pthread.h>
+#include <poll.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/prctl.h>
+#include <sys/stat.h>
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <utils/Log.h>
+#include "edid.h"
+
+static int sock_event_fd = -1;
+
+int hdmi_conn_state = 0;
+int hdmi_audio_state = 0;
+int hdmi_audio_format = 0;
+int hdmi_sample_rate = 0;
+int hdmi_num_channels = 0;
+
+const char hdmi_in_audio_sys_path[] =
+ "/sys/devices/virtual/switch/hpd_state/state";
+const char hdmi_in_audio_dev_path[] = "/devices/virtual/switch/hpd_state";
+const char hdmi_in_audio_state_sys_path[] =
+ "/sys/devices/virtual/switch/audio_state/state";
+const char hdmi_in_audio_state_dev_path[] =
+ "/devices/virtual/switch/audio_state";
+const char hdmi_in_audio_format_sys_path[] =
+ "/sys/devices/virtual/switch/audio_format/state";
+const char hdmi_in_audio_format_dev_path[] =
+ "/devices/virtual/switch/audio_format";
+const char hdmi_in_audio_sample_rate_sys_path[] =
+ "/sys/devices/virtual/switch/sample_rate/state";
+const char hdmi_in_audio_sample_rate_dev_path[] =
+ "/devices/virtual/switch/sample_rate";
+const char hdmi_in_audio_channel_sys_path[] =
+ "/sys/devices/virtual/switch/channels/state";
+const char hdmi_in_audio_channel_dev_path[] =
+ "/devices/virtual/switch/channels";
+
+pthread_t poll_event_th;
+pthread_attr_t poll_event_attr;
+
+void send_edid_data()
+{
+ int fd = -1;
+ int ret;
+ char path[] =
+"/sys/devices/soc/ca0c000.qcom,cci/ca0c000.qcom,cci:toshiba,tc358840@0/tc358840_audio_data";
+
+ fd = open(path, O_WRONLY, 0);
+ if (fd < 0) {
+ ALOGE("Unable open fd for file %s", path);
+ return;
+ }
+
+ ret = write(fd, default_edid, sizeof(default_edid));
+
+ close(fd);
+}
+
+void read_data_from_fd(const char* path, int *value)
+{
+ int fd = -1;
+ char buf[16];
+ int ret;
+
+ fd = open(path, O_RDONLY, 0);
+ if (fd < 0) {
+ ALOGE("Unable open fd for file %s", path);
+ return;
+ }
+
+ ret = read(fd, buf, 15);
+ if (ret < 0) {
+ ALOGE("File %s Data is empty", path);
+ close(fd);
+ return;
+ }
+
+ buf[ret] = '\0';
+ *value = atoi(buf);
+ close(fd);
+}
+
+void get_hdmi_status()
+{
+ read_data_from_fd(hdmi_in_audio_sys_path, &hdmi_conn_state);
+ read_data_from_fd(hdmi_in_audio_state_sys_path, &hdmi_audio_state);
+ read_data_from_fd(hdmi_in_audio_format_sys_path, &hdmi_audio_format);
+ read_data_from_fd(hdmi_in_audio_sample_rate_sys_path, &hdmi_sample_rate);
+ read_data_from_fd(hdmi_in_audio_channel_sys_path, &hdmi_num_channels);
+
+ ALOGI("HDMI In state: %d, audio_state: %d, audio_format: %d,",
+ hdmi_conn_state, hdmi_audio_state, hdmi_audio_format);
+ ALOGI(" hdmi_sample_rate: %d, hdmi_num_channels: %d\n",
+ hdmi_sample_rate, hdmi_num_channels);
+}
+
+int poll_event_init()
+{
+ struct sockaddr_nl sock_addr;
+ int sz = (64*1024);
+ int soc;
+
+ memset(&sock_addr, 0, sizeof(sock_addr));
+ sock_addr.nl_family = AF_NETLINK;
+ sock_addr.nl_pid = getpid();
+ sock_addr.nl_groups = 0xffffffff;
+
+ soc = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);
+ if (soc < 0) {
+ return 0;
+ }
+
+ setsockopt(soc, SOL_SOCKET, SO_RCVBUFFORCE, &sz, sizeof(sz));
+
+ if (bind(soc, (struct sockaddr*) &sock_addr, sizeof(sock_addr)) < 0) {
+ close(soc);
+ return 0;
+ }
+
+ sock_event_fd = soc;
+
+ return (soc > 0);
+}
+
+void* listen_uevent()
+{
+ char buffer[64*1024];
+ struct pollfd fds;
+ int i, count;
+ int j;
+ char *dev_path = NULL;
+ char *switch_state = NULL;
+ char *switch_name = NULL;
+
+ while(1) {
+
+ fds.fd = sock_event_fd;
+ fds.events = POLLIN;
+ fds.revents = 0;
+ i = poll(&fds, 1, -1);
+
+ if (i > 0 && (fds.revents & POLLIN)) {
+ count = recv(sock_event_fd, buffer, (64*1024), 0 );
+ if (count > 0) {
+ buffer[count] = '\0';
+ j = 0;
+ while(j < count) {
+ if (strncmp(&buffer[j], "DEVPATH=", 8) == 0) {
+ dev_path = &buffer[j+8];
+ j += 8;
+ continue;
+ } else if (strncmp(&buffer[j], "SWITCH_NAME=", 12) == 0) {
+ switch_name = &buffer[j+12];
+ j += 12;
+ continue;
+ } else if (strncmp(&buffer[j], "SWITCH_STATE=", 13) == 0) {
+ switch_state = &buffer[j+13];
+ j += 13;
+ continue;
+ }
+ j++;
+ }
+ ALOGI("devpath = %s, switch_name = %s \n",
+ dev_path, switch_name);
+
+ if (strncmp(hdmi_in_audio_dev_path, dev_path,
+ strlen(hdmi_in_audio_dev_path)) == 0) {
+ get_hdmi_status();
+ } else if (strncmp(hdmi_in_audio_sample_rate_dev_path, dev_path,
+ strlen(hdmi_in_audio_sample_rate_dev_path)) == 0) {
+ get_hdmi_status();
+ } else if (strncmp(hdmi_in_audio_state_dev_path, dev_path,
+ strlen(hdmi_in_audio_state_dev_path)) == 0) {
+ get_hdmi_status();
+ } else if (strncmp(hdmi_in_audio_channel_dev_path, dev_path,
+ strlen(hdmi_in_audio_channel_dev_path)) == 0) {
+ get_hdmi_status();
+ }
+ }
+ } else {
+ ALOGD("NO Data\n");
+ }
+ }
+}
+
+int main()
+{
+ ALOGI("hdmi-in event test\n");
+
+ pthread_attr_init(&poll_event_attr);
+ pthread_attr_setdetachstate(&poll_event_attr, PTHREAD_CREATE_JOINABLE);
+ poll_event_init();
+ pthread_create(&poll_event_th, &poll_event_attr,
+ (void *) listen_uevent, NULL);
+ get_hdmi_status();
+
+ /* Enable once kernel side write is proper
+ send_edid_data();*/
+ pthread_join(poll_event_th, NULL);
+ ALOGI("hdmi-in event test exit\n");
+ return 0;
+}
diff --git a/post_proc/Android.mk b/post_proc/Android.mk
index 0fdd136..13ee389 100644
--- a/post_proc/Android.mk
+++ b/post_proc/Android.mk
@@ -84,7 +84,7 @@
################################################################################
-ifneq ($(filter msm8992 msm8994 msm8996 msm8998 sdm660 sdm845 apq8098_latv,$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(filter msm8992 msm8994 msm8996 msm8998 sdm660 sdm845 apq8098_latv msmpeafowl,$(TARGET_BOARD_PLATFORM)),)
include $(CLEAR_VARS)
@@ -104,10 +104,12 @@
LOCAL_MODULE:= libvolumelistener
LOCAL_VENDOR_MODULE := true
+LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+
LOCAL_C_INCLUDES := \
hardware/qcom/audio/hal \
$(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include \
- $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/techpack/audio/include \
+ $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/techpack/audio/include \
external/tinyalsa/include \
$(call include-path-for, audio-effects) \
$(call include-path-for, audio-route) \
diff --git a/post_proc/volume_listener.c b/post_proc/volume_listener.c
index 635fe23..a8c2c53 100644
--- a/post_proc/volume_listener.c
+++ b/post_proc/volume_listener.c
@@ -677,7 +677,7 @@
// check system property to see if dumping is required
char check_dump_val[PROPERTY_VALUE_MAX];
- property_get("audio.volume.listener.dump", check_dump_val, "0");
+ property_get("vendor.audio.volume.listener.dump", check_dump_val, "0");
if (atoi(check_dump_val)) {
dumping_enabled = true;
}
diff --git a/qahw_api/Makefile.am b/qahw_api/Makefile.am
index f2c1060..ca1839a 100644
--- a/qahw_api/Makefile.am
+++ b/qahw_api/Makefile.am
@@ -17,8 +17,8 @@
lib_LTLIBRARIES = libqahw.la
libqahw_la_SOURCES = src/qahw.c \
src/qahw_effect.c
-libqahw_la_CFLAGS = $(AM_CFLAGS) -include stddef.h
+libqahw_la_CFLAGS = -Dstrlcpy=g_strlcpy $(GLIB_CFLAGS) -include glib.h $(AM_CFLAGS) -include stddef.h
libqahw_la_CFLAGS += -D__unused=__attribute__\(\(__unused__\)\)
libqahw_la_CFLAGS += -Wno-sign-compare -Werror
-libqahw_la_LIBADD = -llog -lcutils -lhardware
+libqahw_la_LIBADD = $(GLIB_LIBS) -llog -lcutils -lhardware
libqahw_la_LDFLAGS = -module -shared -avoid-version
diff --git a/qahw_api/inc/qahw_defs.h b/qahw_api/inc/qahw_defs.h
index 23e51cb..c13a1a4 100644
--- a/qahw_api/inc/qahw_defs.h
+++ b/qahw_api/inc/qahw_defs.h
@@ -177,6 +177,26 @@
/* Query if a2dp is supported */
#define QAHW_PARAMETER_KEY_HANDLE_A2DP_DEVICE "isA2dpDeviceSupported"
+#define MAX_OUT_CHANNELS 8
+#define MAX_INP_CHANNELS 8
+
+#define QAHW_PCM_CHANNEL_FL 1 /* Front left channel. */
+#define QAHW_PCM_CHANNEL_FR 2 /* Front right channel. */
+#define QAHW_PCM_CHANNEL_FC 3 /* Front center channel. */
+#define QAHW_PCM_CHANNEL_LS 4 /* Left surround channel. */
+#define QAHW_PCM_CHANNEL_RS 5 /* Right surround channel. */
+#define QAHW_PCM_CHANNEL_LFE 6 /* Low frequency effect channel. */
+#define QAHW_PCM_CHANNEL_CS 7 /* Center surround channel; Rear center channel. */
+#define QAHW_PCM_CHANNEL_LB 8 /* Left back channel; Rear left channel. */
+#define QAHW_PCM_CHANNEL_RB 9 /* Right back channel; Rear right channel. */
+#define QAHW_PCM_CHANNEL_TS 10 /* Top surround channel. */
+#define QAHW_PCM_CHANNEL_CVH 11 /* Center vertical height channel. */
+#define QAHW_PCM_CHANNEL_MS 12 /* Mono surround channel. */
+#define QAHW_PCM_CHANNEL_FLC 13 /* Front left of center. */
+#define QAHW_PCM_CHANNEL_FRC 14 /* Front right of center. */
+#define QAHW_PCM_CHANNEL_RLC 15 /* Rear left of center. */
+#define QAHW_PCM_CHANNEL_RRC 16 /* Rear right of center. */
+
/* type of asynchronous write callback events. Mutually exclusive */
typedef enum {
QAHW_STREAM_CBK_EVENT_WRITE_READY, /* non blocking write completed */
@@ -323,6 +343,17 @@
uint16_t channel_allocation;
};
+typedef struct qahw_mix_matrix_params {
+ uint16_t num_output_channels;
+ uint16_t num_input_channels;
+ uint8_t has_output_channel_map;
+ uint32_t output_channel_map[AUDIO_CHANNEL_COUNT_MAX];
+ uint8_t has_input_channel_map;
+ uint32_t input_channel_map[AUDIO_CHANNEL_COUNT_MAX];
+ uint8_t has_mixer_coeffs;
+ float mixer_coeffs[AUDIO_CHANNEL_COUNT_MAX][AUDIO_CHANNEL_COUNT_MAX];
+} qahw_mix_matrix_params_t;
+
typedef union {
struct qahw_source_tracking_param st_params;
struct qahw_sound_focus_param sf_params;
@@ -335,6 +366,7 @@
struct qahw_adsp_event adsp_event_params;
struct qahw_out_channel_map_param channel_map_params;
struct qahw_device_cfg_param device_cfg_params;
+ struct qahw_mix_matrix_params mix_matrix_params;
} qahw_param_payload;
typedef enum {
@@ -350,7 +382,9 @@
QAHW_PARAM_OUT_CORRECT_DRIFT,
QAHW_PARAM_ADSP_STREAM_CMD,
QAHW_PARAM_OUT_CHANNEL_MAP, /* PARAM to set i/p channel map */
- QAHW_PARAM_DEVICE_CONFIG /* PARAM to set device config */
+ QAHW_PARAM_DEVICE_CONFIG, /* PARAM to set device config */
+ QAHW_PARAM_OUT_MIX_MATRIX_PARAMS,
+ QAHW_PARAM_CH_MIX_MATRIX_PARAMS,
} qahw_param_id;
__END_DECLS
diff --git a/qahw_api/test/Makefile.am b/qahw_api/test/Makefile.am
index d87962b..b4bbea7 100644
--- a/qahw_api/test/Makefile.am
+++ b/qahw_api/test/Makefile.am
@@ -6,9 +6,19 @@
hal_play_test_SOURCES = qahw_playback_test.c \
qahw_effect_test.c
-hal_play_test_CPPFLAGS = $(PLAY_CPPFLAGS) $(PLAY_INCLUDES)
+
hal_play_test_LDADD = -lutils ../libqahw.la
+if QAP
+AM_CFLAGS = -DQAP
+AM_CFLAGS += -I ${WORKSPACE}/audio/mm-audio/qap_wrapper/inc/
+hal_play_test_SOURCES += qap_wrapper_extn.c
+hal_play_test_LDADD += -lqap_wrapper
+endif
+
+hal_play_test_CPPFLAGS = $(PLAY_CPPFLAGS) $(PLAY_INCLUDES)
+hal_play_test_CFLAGS = $(AM_CFLAGS)
+hal_play_test_CFLAGS = -DLINUX_ENABLED
bin_PROGRAMS += hal_rec_test
@@ -18,6 +28,7 @@
hal_rec_test_SOURCES = qahw_multi_record_test.c
hal_rec_test_CPPFLAGS = -Dstrlcat=g_strlcat $(GLIB_CFLAGS) -include glib.h
hal_rec_test_CPPFLAGS += $(REC_CPPFLAGS) $(REC_INCLUDES)
+hal_play_test_CFLAGS += $(AM_CFLAGS)
hal_rec_test_LDADD = -lutils ../libqahw.la $(GLIB_LIBS)
bin_PROGRAMS += trans_loopback_test
diff --git a/qahw_api/test/qahw_playback_test.c b/qahw_api/test/qahw_playback_test.c
index db189eb..fb69d93 100644
--- a/qahw_api/test/qahw_playback_test.c
+++ b/qahw_api/test/qahw_playback_test.c
@@ -18,21 +18,7 @@
/* Test app to play audio at the HAL layer */
-#include <getopt.h>
-#include <pthread.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-#include <time.h>
-#include <signal.h>
-#include <cutils/str_parms.h>
-#include <tinyalsa/asoundlib.h>
-#include "qahw_api.h"
-#include "qahw_defs.h"
-#include "qahw_effect_api.h"
-#include "qahw_effect_test.h"
+#include "qahw_playback_test.h"
#define nullptr NULL
@@ -50,9 +36,9 @@
#define KV_PAIR_MAX_LENGTH 1000
#define FORMAT_PCM 1
-#define WAV_HEADER_LENGTH_MAX 46
+#define WAV_HEADER_LENGTH_MAX 128
-#define MAX_PLAYBACK_STREAMS 3
+#define MAX_PLAYBACK_STREAMS 105 //This value is changed to suppport 100 clips in playlist
#define PRIMARY_STREAM_INDEX 0
#define KVPAIRS_MAX 100
@@ -68,50 +54,10 @@
#define DTSHD_CHUNK_STREAM_KEYWORD "STRMDATA"
#define DTSHD_META_KEYWORD_SIZE 8 /*in bytes */
-static int get_wav_header_length (FILE* file_stream);
static ssize_t get_bytes_to_read(FILE* file, int filetype);
static void init_streams(void);
int pthread_cancel(pthread_t thread);
-
-enum {
- FILE_WAV = 1,
- FILE_MP3,
- FILE_AAC,
- FILE_AAC_ADTS,
- FILE_FLAC,
- FILE_ALAC,
- FILE_VORBIS,
- FILE_WMA,
- FILE_AC3,
- FILE_AAC_LATM,
- FILE_EAC3,
- FILE_EAC3_JOC,
- FILE_DTS,
- FILE_MP2,
- FILE_APTX,
- FILE_TRUEHD,
- FILE_IEC61937
-};
-
-typedef enum {
- USB_MODE_DEVICE,
- USB_MODE_HOST,
- USB_MODE_NONE
-} usb_mode_type_t;
-
-typedef enum {
- AAC_LC = 1,
- AAC_HE_V1,
- AAC_HE_V2
-} aac_format_type_t;
-
-typedef enum {
- WMA = 1,
- WMA_PRO,
- WMA_LOSSLESS
-} wma_format_type_t;
-
struct wav_header {
uint32_t riff_id;
uint32_t riff_sz;
@@ -128,18 +74,6 @@
uint32_t data_sz;
};
-struct audio_config_params {
- qahw_module_handle_t *qahw_mod_handle;
- audio_io_handle_t handle;
- audio_devices_t input_device;
- audio_config_t config;
- audio_input_flags_t flags;
- const char* kStreamName ;
- audio_source_t kInputSource;
- char *file_name;
- volatile bool thread_exit;
-};
-
struct proxy_data {
struct audio_config_params acp;
struct wav_header hdr;
@@ -161,41 +95,6 @@
uint32_t config_mask;
};
-typedef struct {
- qahw_module_handle_t *qahw_in_hal_handle;
- qahw_module_handle_t *qahw_out_hal_handle;
- audio_io_handle_t handle;
- char* filename;
- FILE* file_stream;
- int filetype;
- int stream_index;
- audio_devices_t output_device;
- audio_devices_t input_device;
- audio_config_t config;
- audio_output_flags_t flags;
- qahw_stream_handle_t* out_handle;
- qahw_stream_handle_t* in_handle;
- int channels;
- aac_format_type_t aac_fmt_type;
- wma_format_type_t wma_fmt_type;
- char *kvpair_values;
- bool flags_set;
- usb_mode_type_t usb_mode;
- int effect_index;
- int effect_preset_strength;
- bool drift_query;
- bool drift_correction;
- bool play_later;
- char *device_url;
- thread_func_t ethread_func;
- thread_data_t *ethread_data;
- cmd_data_t cmd_data;
- pthread_cond_t write_cond;
- pthread_mutex_t write_lock;
- pthread_cond_t drain_cond;
- pthread_mutex_t drain_lock;
-}stream_config;
-
/* Lock for dual main usecase */
pthread_cond_t dual_main_cond;
pthread_mutex_t dual_main_lock;
@@ -209,13 +108,12 @@
FILE * log_file = NULL;
volatile bool stop_playback = false;
const char *log_filename = NULL;
-float vol_level = 0.01;
struct proxy_data proxy_params;
pthread_t playback_thread[MAX_PLAYBACK_STREAMS];
bool thread_active[MAX_PLAYBACK_STREAMS] = { false };
+bool qap_wrapper_session_active = false;
stream_config stream_param[MAX_PLAYBACK_STREAMS];
-bool kpi_mode;
bool event_trigger;
/*
@@ -260,9 +158,12 @@
"music_offload_wma_format_tag=%d;"
#ifndef AUDIO_OUTPUT_FLAG_ASSOCIATED
-#define AUDIO_OUTPUT_FLAG_ASSOCIATED 0x8000
+#define AUDIO_OUTPUT_FLAG_ASSOCIATED 0x10000000
#endif
+#ifndef AUDIO_OUTPUT_FLAG_INTERACTIVE
+#define AUDIO_OUTPUT_FLAG_INTERACTIVE 0x80000000
+#endif
static bool request_wake_lock(bool wakelock_acquired, bool enable)
{
@@ -662,7 +563,7 @@
size_t bytes_wanted = 0;
size_t write_length = 0;
size_t bytes_remaining = 0;
- size_t bytes_written = 0;
+ ssize_t bytes_written = 0;
size_t bytes_read = 0;
char *data_ptr = NULL;
@@ -683,6 +584,12 @@
fprintf(log_file, "stream %d: after the dual main signal\n", params->stream_index);
pthread_mutex_unlock(&dual_main_lock);
}
+
+ if (params->interactive_strm) {
+ params->flags = AUDIO_OUTPUT_FLAG_INTERACTIVE;
+ fprintf(stderr, "stream %s %d: Interactive stream\n", __func__, params->stream_index);
+ }
+
rc = qahw_open_output_stream(params->qahw_out_hal_handle,
params->handle,
params->output_device,
@@ -950,11 +857,6 @@
drift_params.thread_exit = true;
pthread_join(drift_query_thread, NULL);
}
- if ((params->flags & AUDIO_OUTPUT_FLAG_MAIN) && is_assoc_active()) {
- fprintf(log_file, "Closing Associated as Main Stream reached EOF %d \n",
- params->stream_index, rc);
- stop_playback = true;
- }
rc = qahw_out_standby(params->out_handle);
if (rc) {
fprintf(log_file, "stream %d: out standby failed %d \n", params->stream_index, rc);
@@ -994,6 +896,7 @@
case AAC_LC:
case AAC_HE_V1:
case AAC_HE_V2:
+ case AAC_LOAS:
valid_format_type = true;
break;
default:
@@ -1061,12 +964,15 @@
return aac_format;
}
-static void get_file_format(stream_config *stream_info)
+void get_file_format(stream_config *stream_info)
{
int rc = 0;
if (!(stream_info->flags_set)) {
- stream_info->flags = AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING;
+ if (stream_info->interactive_strm)
+ stream_info->flags = AUDIO_OUTPUT_FLAG_INTERACTIVE;
+ else
+ stream_info->flags = AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING;
stream_info->flags |= AUDIO_OUTPUT_FLAG_DIRECT;
}
@@ -1162,6 +1068,7 @@
fprintf(log_file, "Does not support given filetype\n");
fprintf(stderr, "Does not support given filetype\n");
usage();
+ hal_test_qap_usage();
return;
}
stream_info->config.sample_rate = stream_info->config.offload_info.sample_rate;
@@ -1458,6 +1365,10 @@
else
direction = PCM_OUT;
+ if (direction == PCM_OUT && stream->interactive_strm) {
+ stream->flags = AUDIO_OUTPUT_FLAG_INTERACTIVE;
+ fprintf(stderr, "stream %d: Interactive stream\n", stream->stream_index);
+ }
fprintf(log_file, "%s: opening %s stream\n", __func__, ((direction == PCM_IN)? "input":"output"));
if (PCM_IN == direction)
@@ -1595,6 +1506,11 @@
printf(" -m --mode - usb operating mode(Device Mode is default)\n");
printf(" 0:Device Mode(host drives the stream and its params and so no need to give params as input)\n");
printf(" 1:Host Mode(user can give stream and stream params via a stream(SD card file) or setup loopback with given params\n");
+ printf(" -i --intr-strm - interactive stream indicator\n");
+ printf(" -C --Device Config - Device Configuration params\n");
+ printf(" Params should be in the order defined in struct qahw_device_cfg_param. Order is: \n");
+ printf(" <sample_rate>, <channels>, <bit_width>, <format>, <device>, <channel_map[channels]>, <channel_allocation> \n");
+ printf(" Example(6 channel HDMI config): hal_play_test -f /data/ChID16bit_5.1ch_48k.wav -v 0.9 -d 1024 -c 6 -C 48000 6 16 1 1024 1 2 6 3 4 5 19\n");
printf(" \n Examples \n");
printf(" hal_play_test -f /data/Anukoledenadu.wav -> plays Wav stream with default params\n\n");
printf(" hal_play_test -f /data/MateRani.mp3 -t 2 -d 2 -v 0.01 -r 44100 -c 2 \n");
@@ -1660,9 +1576,11 @@
printf(" ->full duplex, setup both primary to usb and usb to primary loopbacks\n");
printf(" ->Note:-P separates the steam params for both the loopbacks\n");
printf(" ->Note:all the USB device commmands(above) should be accompanied with the host side commands\n\n");
+ printf("hal_play_test -f interactive_audio.wav -d 2 -l out.txt -k \"mixer_ctrl=pan_scale;c=1;o=6;I=fc;O=fl,fr,fc,lfe,bl,br;M=0.5,0.5,0,0,0,0\" -i 1\n");
+ printf(" ->kv_pair for downmix or pan_scale should folow the above sequence, one can pass downmix & pan_scale params/coeff matrices. For each control params should be sent separately \n");
}
-static int get_wav_header_length (FILE* file_stream)
+int get_wav_header_length (FILE* file_stream)
{
int subchunk_size = 0, wav_header_len = 0;
@@ -1779,7 +1697,7 @@
return file_read_size;
}
-static qahw_module_handle_t * load_hal(audio_devices_t dev) {
+qahw_module_handle_t * load_hal(audio_devices_t dev) {
qahw_module_handle_t *hal = NULL;
if ((AUDIO_DEVICE_IN_USB_DEVICE == dev) ||
@@ -1823,7 +1741,7 @@
* this function unloads all the loaded hal modules so this should be called
* after all the stream playback are concluded.
*/
-static int unload_hals() {
+int unload_hals() {
if (usb_hal_handle) {
fprintf(log_file,"\nUnLoading usb HAL\n");
@@ -1852,6 +1770,171 @@
return 1;
}
+audio_channel_mask_t get_channel_mask_for_name(char *name) {
+ audio_channel_mask_t channel_type = AUDIO_CHANNEL_INVALID;
+ if (NULL == name)
+ return channel_type;
+ else if (strncmp(name, "fl", 2) == 0)
+ channel_type = QAHW_PCM_CHANNEL_FL;
+ else if (strncmp(name, "fr", 2) == 0)
+ channel_type = QAHW_PCM_CHANNEL_FR;
+ else if (strncmp(name, "fc", 2) == 0)
+ channel_type = QAHW_PCM_CHANNEL_FC;
+ else if (strncmp(name, "lfe", 2) == 0)
+ channel_type = QAHW_PCM_CHANNEL_LFE;
+ else if (strncmp(name, "bl", 2) == 0)
+ channel_type = QAHW_PCM_CHANNEL_LB;
+ else if (strncmp(name, "br", 2) == 0)
+ channel_type = QAHW_PCM_CHANNEL_RB;
+ else if (strncmp(name, "flc", 3) == 0)
+ channel_type = QAHW_PCM_CHANNEL_FLC;
+ else if (strncmp(name, "frc", 3) == 0)
+ channel_type = QAHW_PCM_CHANNEL_FRC;
+ else if (strncmp(name, "cs", 2) == 0)
+ channel_type = QAHW_PCM_CHANNEL_CS;
+ else if (strncmp(name, "ls", 2) == 0)
+ channel_type = QAHW_PCM_CHANNEL_LS;
+ else if (strncmp(name, "rs", 2) == 0)
+ channel_type = QAHW_PCM_CHANNEL_RS;
+ else if (strncmp(name, "ts", 2) == 0)
+ channel_type = QAHW_PCM_CHANNEL_TS;
+ else if (strncmp(name, "cvh", 3) == 0)
+ channel_type = QAHW_PCM_CHANNEL_CVH;
+ else if (strncmp(name, "ms", 3) == 0)
+ channel_type = QAHW_PCM_CHANNEL_MS;
+ else if (strncmp(name, "rlc", 3) == 0)
+ channel_type = QAHW_PCM_CHANNEL_RLC;
+ else if (strncmp(name, "rrc", 3) == 0)
+ channel_type = QAHW_PCM_CHANNEL_RRC;
+
+ return channel_type;
+}
+
+int extract_channel_mapping(uint32_t *channel_map, const char * arg_string){
+
+ char *token_string = NULL;
+ char *init_ptr = NULL;
+ char *token = NULL;
+ char *saveptr = NULL;
+
+ if (NULL == channel_map)
+ return -EINVAL;
+
+ if (NULL == arg_string)
+ return EINVAL;
+
+ token_string = strdup(arg_string);
+
+ if(token_string != NULL) {
+ init_ptr = token_string;
+ token = strtok_r(token_string, ",", &saveptr);
+ int index = 0;
+ if (NULL == token)
+ return -EINVAL;
+ else
+ channel_map[index++] = get_channel_mask_for_name(token);
+
+ while(NULL !=(token = strtok_r(NULL,",",&saveptr)))
+ channel_map[index++] = get_channel_mask_for_name(token);
+
+ free(init_ptr);
+ init_ptr = NULL;
+ token_string = NULL;
+ } else
+ return -EINVAL;
+ return 0;
+}
+
+int extract_mixer_coeffs(qahw_mix_matrix_params_t * mm_params, const char * arg_string){
+
+ char *token_string = NULL;
+ char *init_ptr = NULL;
+ char *token = NULL;
+ char *saveptr = NULL;
+ int i = 0;
+ int j = 0;
+
+ if (NULL == mm_params)
+ return -EINVAL;
+
+ if (NULL == arg_string)
+ return -EINVAL;
+
+ token_string = strdup(arg_string);
+
+ if(token_string != NULL) {
+ init_ptr = token_string;
+ token = strtok_r(token_string, ",", &saveptr);
+ int index = 0;
+ if (NULL == token)
+ return -EINVAL;
+ else {
+ mm_params->mixer_coeffs[i][j] = atof(token);
+ j++;
+ }
+
+ while(NULL !=(token = strtok_r(NULL,",",&saveptr))) {
+ if(j == mm_params->num_input_channels) {
+ j=0;
+ i++;
+ }
+ if(i == mm_params->num_output_channels)
+ break;
+ mm_params->mixer_coeffs[i][j++] = atof(token);
+ }
+ free(init_ptr);
+ init_ptr = NULL;
+ token_string = NULL;
+ } else
+ return -EINVAL;
+}
+
+#ifdef QAP
+int start_playback_through_qap(char * kvp_string, int num_of_streams, qahw_module_handle_t *hal_handle) {
+ stream_config *stream = NULL;
+ int rc = 0;
+ int i;
+
+ fprintf(stdout, "kvp_string %s and num_of_streams %d\n", kvp_string, num_of_streams);
+ for (i = 0; i < num_of_streams; i++) {
+ stream = &stream_param[i];
+ if (stream->filename) {
+ if ((stream->file_stream = fopen(stream->filename, "r"))== NULL) {
+ fprintf(log_file, "Cannot open audio file %s\n", stream->filename);
+ fprintf(stderr, "Cannot open audio file %s\n", stream->filename);
+ return -EINVAL;
+ }
+ }
+ get_file_format(stream);
+ fprintf(stdout, "Playing from:%s\n", stream->filename);
+ qap_module_handle_t qap_module_handle = NULL;
+ if (!qap_wrapper_session_active) {
+ rc = qap_wrapper_session_open(kvp_string, stream, num_of_streams, hal_handle);
+ if (rc != 0) {
+ fprintf(stderr, "Session Open failed\n");
+ return -EINVAL;
+ }
+ qap_wrapper_session_active = true;
+ }
+
+ if (qap_wrapper_session_active) {
+ stream->qap_module_handle = qap_wrapper_stream_open(stream);
+ if (stream->qap_module_handle == NULL) {
+ fprintf(stderr, "QAP Stream open Failed\n");
+ } else {
+ fprintf(stdout, "QAP module handle is %p and file name is %s\n", stream->qap_module_handle, stream->filename);
+ rc = pthread_create(&playback_thread[i], NULL, qap_wrapper_start_stream, (void *)&stream_param[i]);
+ if (rc) {
+ fprintf(stderr, "stream %d: failed to create thread\n", stream->stream_index);
+ return -EINVAL;
+ }
+ thread_active[i] = true;
+ }
+ }
+ }
+ return 0;
+}
+#endif
int main(int argc, char* argv[]) {
char *ba = NULL;
@@ -1860,16 +1943,31 @@
struct qahw_aptx_dec_param aptx_params;
int rc = 0;
int i = 0;
+ int iter_i = 0;
+ int iter_j = 0;
+ int chmap_iter = 0;
+
kpi_mode = false;
+ char mixer_ctrl_name[64] = {0};
+ char input_ch[64] = {0};
+ char output_ch[64] = {0};
+ char input_ch_map[64] = {0};
+ char output_ch_map[64] = {0};
+ char mixer_coeff[64] = {0};
event_trigger = false;
bool wakelock_acquired = false;
log_file = stdout;
proxy_params.acp.file_name = "/data/pcm_dump.wav";
stream_config *stream = NULL;
+
+ struct qahw_device_cfg_param device_cfg_params;
+ bool send_device_config = false;
+
init_streams();
int num_of_streams = 1;
+ char kvp_string[KV_PAIR_MAX_LENGTH] = {0};
struct option long_options[] = {
/* These options set a flag. */
@@ -1880,6 +1978,7 @@
{"channels", required_argument, 0, 'c'},
{"bitwidth", required_argument, 0, 'b'},
{"volume", required_argument, 0, 'v'},
+ {"enable-dump", required_argument, 0, 'V'},
{"log-file", required_argument, 0, 'l'},
{"dump-file", required_argument, 0, 'D'},
{"file-type", required_argument, 0, 't'},
@@ -1898,6 +1997,11 @@
{"mode", required_argument, 0, 'm'},
{"effect-preset", required_argument, 0, 'p'},
{"effect-strength", required_argument, 0, 'S'},
+ {"render-format", required_argument, 0, 'x'},
+ {"timestamp-file", required_argument, 0, 'y'},
+ {"intr-strm", required_argument, 0, 'i'},
+ {"device-config", required_argument, 0, 'C'},
+ {"play-list", required_argument, 0, 'g'},
{"help", no_argument, 0, 'h'},
{0, 0, 0, 0}
};
@@ -1921,7 +2025,7 @@
while ((opt = getopt_long(argc,
argv,
- "-f:r:c:b:d:s:v:l:t:a:w:k:PD:KF:Ee:A:u:m:S:p:qQh",
+ "-f:r:c:b:d:s:v:V:l:t:a:w:k:PD:KF:Ee:A:u:m:S:C:p::x:y:qQh:i:h:g:",
long_options,
&option_index)) != -1) {
@@ -1951,6 +2055,9 @@
case 'v':
vol_level = atof(optarg);
break;
+ case 'V':
+ enable_dump = atof(optarg);
+ break;
case 'l':
log_filename = optarg;
if (strcasecmp(log_filename, "stdout") &&
@@ -1962,6 +2069,9 @@
log_file = stdout;
}
break;
+ case 'i':
+ stream_param[i].interactive_strm = atoi(optarg);
+ break;
case 't':
stream_param[i].filetype = atoi(optarg);
break;
@@ -1972,7 +2082,80 @@
stream_param[i].wma_fmt_type = atoi(optarg);
break;
case 'k':
- stream_param[i].kvpair_values = optarg;
+ get_kvpairs_string(optarg, "mixer_ctrl", mixer_ctrl_name);
+ printf("%s, mixer_ctrl_name- %s\n", __func__, mixer_ctrl_name);
+ if(strncmp(mixer_ctrl_name, "downmix", 7) == 0) {
+ stream_param[i].mix_ctrl = QAHW_PARAM_CH_MIX_MATRIX_PARAMS;
+
+ get_kvpairs_string(optarg, "c", input_ch);
+ stream_param[i].mm_params_downmix.num_input_channels = atoi(input_ch);
+ get_kvpairs_string(optarg, "o", output_ch);
+ stream_param[i].mm_params_downmix.num_output_channels = atoi(output_ch);
+ get_kvpairs_string(optarg, "I", input_ch_map);
+ get_kvpairs_string(optarg, "O", output_ch_map);
+ get_kvpairs_string(optarg, "M", mixer_coeff);
+
+ extract_channel_mapping(stream_param[i].mm_params_downmix.input_channel_map, input_ch_map);
+ stream_param[i].mm_params_downmix.has_input_channel_map = 1;
+ fprintf(log_file, "\ndownmix Input channel mapping: ");
+ for (iter_i= 0; iter_i < stream_param[i].mm_params_downmix.num_input_channels; iter_i++) {
+ fprintf(log_file, "0x%x, ", stream_param[i].mm_params_downmix.input_channel_map[iter_i]);
+ }
+
+ extract_channel_mapping(stream_param[i].mm_params_downmix.output_channel_map, output_ch_map);
+ stream_param[i].mm_params_downmix.has_output_channel_map = 1;
+ fprintf(log_file, "\ndownmix Output channel mapping: ");
+ for (iter_i = 0; iter_i < stream_param[i].mm_params_downmix.num_output_channels; iter_i++)
+ fprintf(log_file, "0x%x, ", stream_param[i].mm_params_downmix.output_channel_map[iter_i]);
+
+
+ extract_mixer_coeffs(&stream_param[i].mm_params_downmix, mixer_coeff);
+ stream_param[i].mm_params_downmix.has_mixer_coeffs = 1;
+ fprintf(log_file, "\ndownmix mixer coeffs:\n");
+ for (iter_i = 0; iter_i < stream_param[i].mm_params_downmix.num_output_channels; iter_i++){
+ for (iter_j = 0; iter_j < stream_param[i].mm_params_downmix.num_input_channels; iter_j++){
+ fprintf(log_file, "%.2f ",stream_param[i].mm_params_downmix.mixer_coeffs[iter_i][iter_j]);
+ }
+ fprintf(log_file, "\n");
+ }
+
+ } else if(strncmp(mixer_ctrl_name, "pan_scale", 9) == 0) {
+ stream_param[i].pan_scale_ctrl = QAHW_PARAM_OUT_MIX_MATRIX_PARAMS;
+
+ get_kvpairs_string(optarg, "c", input_ch);
+ stream_param[i].mm_params_pan_scale.num_input_channels = atoi(input_ch);
+ get_kvpairs_string(optarg, "o", output_ch);
+ stream_param[i].mm_params_pan_scale.num_output_channels = atoi(output_ch);
+ get_kvpairs_string(optarg, "I", input_ch_map);
+ get_kvpairs_string(optarg, "O", output_ch_map);
+ get_kvpairs_string(optarg, "M", mixer_coeff);
+
+ extract_channel_mapping(stream_param[i].mm_params_pan_scale.input_channel_map, input_ch_map);
+ stream_param[i].mm_params_pan_scale.has_input_channel_map = 1;
+ fprintf(log_file, "\n pan_sclae Input channel mapping: ");
+ for (iter_i= 0; iter_i < stream_param[i].mm_params_pan_scale.num_input_channels; iter_i++) {
+ fprintf(log_file, "0x%x, ", stream_param[i].mm_params_pan_scale.input_channel_map[iter_i]);
+ }
+
+ extract_channel_mapping(stream_param[i].mm_params_pan_scale.output_channel_map, output_ch_map);
+ stream_param[i].mm_params_pan_scale.has_output_channel_map = 1;
+ fprintf(log_file, "\n pan_scale Output channel mapping: ");
+ for (iter_i = 0; iter_i < stream_param[i].mm_params_pan_scale.num_output_channels; iter_i++)
+ fprintf(log_file, "0x%x, ", stream_param[i].mm_params_pan_scale.output_channel_map[iter_i]);
+
+ extract_mixer_coeffs(&stream_param[i].mm_params_pan_scale, mixer_coeff);
+ stream_param[i].mm_params_pan_scale.has_mixer_coeffs = 1;
+ fprintf(log_file, "\n pan_scale mixer coeffs:\n");
+ for (iter_i = 0; iter_i < stream_param[i].mm_params_pan_scale.num_output_channels; iter_i++){
+ for (iter_j = 0; iter_j < stream_param[i].mm_params_pan_scale.num_input_channels; iter_j++){
+ fprintf(log_file, "%.2f ",stream_param[i].mm_params_pan_scale.mixer_coeffs[iter_i][iter_j]);
+ }
+ fprintf(log_file, "\n");
+ }
+
+ } else {
+ stream_param[i].kvpair_values = optarg;
+ }
break;
case 'D':
proxy_params.acp.file_name = optarg;
@@ -2033,8 +2216,78 @@
case 'm':
stream_param[i].usb_mode = atoi(optarg);
break;
+ case 'x':
+ render_format = atoi(optarg);
+ break;
+ case 'y':
+ stream_param[i].timestamp_filename = optarg;
+ break;
+ case 'C':
+ fprintf(log_file, " In Device config \n");
+ fprintf(stderr, " In Device config \n");
+ send_device_config = true;
+
+ //Read Sample Rate
+ if (optind < argc && *argv[optind] != '-') {
+ device_cfg_params.sample_rate = atoi(optarg);
+ fprintf(log_file, " Device config :::: sample_rate - %d \n", device_cfg_params.sample_rate);
+ fprintf(stderr, " Device config :::: sample_rate - %d \n", device_cfg_params.sample_rate);
+ }
+
+ //Read Channels
+ if (optind < argc && *argv[optind] != '-') {
+ device_cfg_params.channels = atoi(argv[optind]);
+ optind++;
+ fprintf(log_file, " Device config :::: channels - %d \n", device_cfg_params.channels);
+ fprintf(stderr, " Device config :::: channels - %d \n", device_cfg_params.channels);
+ }
+
+ //Read Bit width
+ if (optind < argc && *argv[optind] != '-') {
+ device_cfg_params.bit_width = atoi(argv[optind]);
+ optind++;
+ fprintf(log_file, " Device config :::: bit_width - %d \n", device_cfg_params.bit_width);
+ fprintf(stderr, " Device config :::: bit_width - %d \n", device_cfg_params.bit_width);
+ }
+
+ //Read Format
+ if (optind < argc && *argv[optind] != '-') {
+ device_cfg_params.format = atoi(argv[optind]);
+ optind++;
+ fprintf(log_file, " Device config :::: format - %d \n", device_cfg_params.format);
+ fprintf(stderr, " Device config :::: format - %d \n", device_cfg_params.format);
+ }
+
+ //Read Device
+ if (optind < argc && *argv[optind] != '-') {
+ device_cfg_params.device = atoi(argv[optind]);
+ optind++;
+ fprintf(log_file, " Device config :::: device - %d \n", device_cfg_params.device);
+ fprintf(stderr, " Device config :::: device - %d \n", device_cfg_params.device);
+ }
+
+ //Read Channel Map
+ while ((optind < argc && *argv[optind] != '-') && (chmap_iter < device_cfg_params.channels)) {
+ device_cfg_params.channel_map[chmap_iter] = atoi(argv[optind]);
+ optind++;
+ fprintf(log_file, " Device config :::: channel_map[%d] - %d \n", chmap_iter, device_cfg_params.channel_map[chmap_iter]);
+ fprintf(stderr, " Device config :::: channel_map[%d] - %d \n", chmap_iter, device_cfg_params.channel_map[chmap_iter]);
+ chmap_iter++;
+ }
+
+ //Read Channel Allocation
+ if (optind < argc && *argv[optind] != '-') {
+ device_cfg_params.channel_allocation = atoi(argv[optind]);
+ optind++;
+ fprintf(log_file, " Device config :::: channel_allocation - %d \n", device_cfg_params.channel_allocation);
+ fprintf(stderr, " Device config :::: channel_allocation - %d \n", device_cfg_params.channel_allocation);
+ }
+ break;
+ case 'g':
+ break;
case 'h':
usage();
+ hal_test_qap_usage();
return 0;
break;
@@ -2082,20 +2335,59 @@
}
+ if (is_qap_session_active(argc, argv, kvp_string)) {
+ char *file_name = NULL;
+ char *file_name_tmp = NULL;
+ char *cmd_kvp_str[100] = {NULL};
+ char *play_list_kvp_str[100] = {NULL};
+ int i = 0, j = 0;
+ qahw_module_handle_t *qap_out_hal_handle = NULL;
+
+ stream = &stream_param[i];
+ qap_out_hal_handle = load_hal(stream->output_device);
+ if (qap_out_hal_handle == NULL) {
+ fprintf(stderr, "Failed log load HAL\n");
+ goto exit;
+ }
+
+ file_name = (char*) check_for_playlist(kvp_string);
+ fprintf(stderr, "%s file_name is %s \n", __FUNCTION__, file_name);
+ if (file_name != NULL) {
+ FILE *fp = fopen(file_name, "r+");
+ if (fp != NULL) {
+ get_play_list(fp, &stream_param, &num_of_streams, cmd_kvp_str);
+ for (j = 0; j < num_of_streams; j++) {
+ play_list_kvp_str[j] = strdup(cmd_kvp_str[j]);
+ }
+ rc = start_playback_through_qap_playlist(play_list_kvp_str, num_of_streams, kvp_string, stream_param, qap_wrapper_session_active, qap_out_hal_handle);
+ if (rc != 0) {
+ fprintf(stderr, "QAP playback failed\n");
+ }
+ } else {
+ fprintf(stderr, "%s file open failed\nnd errno is %d", __FUNCTION__, errno);
+ }
+ } else {
+ rc = start_playback_through_qap(kvp_string, num_of_streams, qap_out_hal_handle);
+ if (rc != 0) {
+ fprintf(stderr, "QAP playback failed\n");
+ }
+ }
+ goto exit;
+ }
for (i = 0; i < num_of_streams; i++) {
stream = &stream_param[i];
- if ((kpi_mode == false) &&
+ if ((kpi_mode == false) &&
(AUDIO_DEVICE_NONE == stream->input_device)){
- if (stream_param[PRIMARY_STREAM_INDEX].filename == nullptr) {
- fprintf(log_file, "Primary file name is must for non kpi-mode\n");
- fprintf(stderr, "Primary file name is must for non kpi-mode\n");
- goto exit;
- }
+ if (stream_param[PRIMARY_STREAM_INDEX].filename == nullptr) {
+ fprintf(log_file, "Primary file name is must for non kpi-mode\n");
+ fprintf(stderr, "Primary file name is must for non kpi-mode\n");
+ goto exit;
+ }
}
if (stream->output_device != AUDIO_DEVICE_NONE)
- if ((stream->qahw_out_hal_handle = load_hal(stream->output_device)) <= 0)
+ if ((stream->qahw_out_hal_handle = load_hal(stream->output_device)) <= 0)
goto exit;
if (stream->input_device != AUDIO_DEVICE_NONE)
@@ -2106,8 +2398,8 @@
(AUDIO_DEVICE_NONE != stream->input_device))
/*
* hal loopback at what params we need to probably detect.
- */
- if(detect_stream_params(stream) < 0)
+ */
+ if(detect_stream_params(stream) < 0)
goto exit;
if (stream->filename) {
@@ -2145,11 +2437,20 @@
fprintf(log_file, "Saving pcm data to file: %s\n", proxy_params.acp.file_name);
/* Set device connection state for HDMI */
- if ((stream->output_device == AUDIO_DEVICE_OUT_AUX_DIGITAL) ||
- (stream->output_device == AUDIO_DEVICE_OUT_BLUETOOTH_A2DP)) {
+ if ((stream->output_device & AUDIO_DEVICE_OUT_AUX_DIGITAL) ||
+ (stream->output_device & AUDIO_DEVICE_OUT_BLUETOOTH_A2DP)) {
char param[100] = {0};
- snprintf(param, sizeof(param), "%s=%d", "connect", stream->output_device);
+ uint32_t device = 0;
+
+ if (stream->output_device & AUDIO_DEVICE_OUT_AUX_DIGITAL)
+ device = AUDIO_DEVICE_OUT_AUX_DIGITAL;
+ else if (stream->output_device & AUDIO_DEVICE_OUT_BLUETOOTH_A2DP)
+ device = AUDIO_DEVICE_OUT_BLUETOOTH_A2DP;
+
+ snprintf(param, sizeof(param), "%s=%d", "connect", device);
qahw_set_parameters(stream->qahw_out_hal_handle, param);
+ fprintf(log_file, "Sending Connect Event: %s\n", param);
+ fprintf(stderr, "Sending Connect Event: %s\n", param);
}
fprintf(log_file, "stream %d: File Type:%d\n", stream->stream_index, stream->filetype);
@@ -2184,12 +2485,21 @@
goto exit;
}
}
+
+ if (send_device_config) {
+ payload = (qahw_param_payload)device_cfg_params;
+ rc = qahw_set_param_data(stream->qahw_out_hal_handle, QAHW_PARAM_DEVICE_CONFIG, &payload);
+ if (rc != 0) {
+ fprintf(log_file, "Set Device Config Failed\n");
+ fprintf(stderr, "Set Device Config Failed\n");
+ }
+ }
+
if (is_dual_main && i >= 2 ) {
stream_param[i].play_later = true;
fprintf(log_file, "stream %d: play_later = %d\n", i, stream_param[i].play_later);
}
-
rc = pthread_create(&playback_thread[i], NULL, start_stream_playback, (void *)&stream_param[i]);
if (rc) {
fprintf(log_file, "stream %d: failed to create thread\n", stream->stream_index);
@@ -2198,14 +2508,34 @@
}
thread_active[i] = true;
+ usleep(500000); //Wait until stream is created
+ if(stream_param[i].pan_scale_ctrl == QAHW_PARAM_OUT_MIX_MATRIX_PARAMS) {
+ payload = (qahw_param_payload) stream_param[i].mm_params_pan_scale;
+ param_id = QAHW_PARAM_OUT_MIX_MATRIX_PARAMS;
+ rc = qahw_out_set_param_data(stream->out_handle, param_id, &payload);
+ if (rc != 0) {
+ fprintf(log_file, "QAHW_PARAM_OUT_MIX_MATRIX_PARAMS could not be sent!\n");
+ }
+ }
+ if(stream_param[i].mix_ctrl == QAHW_PARAM_CH_MIX_MATRIX_PARAMS) {
+ payload = (qahw_param_payload) stream_param[i].mm_params_downmix;
+ param_id = QAHW_PARAM_CH_MIX_MATRIX_PARAMS;
+ rc = qahw_out_set_param_data(stream->out_handle, param_id, &payload);
+ if (rc != 0) {
+ fprintf(log_file, "QAHW_PARAM_CH_MIX_MATRIX_PARAMS could not be sent!\n");
+ }
+ }
}
exit:
-
for (i=0; i<MAX_PLAYBACK_STREAMS; i++) {
if(thread_active[i])
- pthread_join(playback_thread[i], NULL);
+ pthread_join(playback_thread[i], NULL);
+ }
+
+ if(qap_wrapper_session_active) {
+ qap_wrapper_session_close();
}
/*
diff --git a/qahw_api/test/qahw_playback_test.h b/qahw_api/test/qahw_playback_test.h
new file mode 100644
index 0000000..1f524b9
--- /dev/null
+++ b/qahw_api/test/qahw_playback_test.h
@@ -0,0 +1,185 @@
+/*
+ * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright (C) 2015 The Android Open Source Project *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef QAHW_PLAYBACK_TEST_H
+#define QAHW_PLAYBACK_TEST_H
+
+#include <getopt.h>
+#include <pthread.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <time.h>
+#include <signal.h>
+#include <cutils/str_parms.h>
+#include <tinyalsa/asoundlib.h>
+#include "qahw_api.h"
+#include "qahw_defs.h"
+#include "qahw_effect_api.h"
+#include "qahw_effect_test.h"
+
+#define MAX_STR_LEN 256
+typedef void* qap_module_handle_t;
+bool kpi_mode;
+bool enable_dump;
+float vol_level;
+uint8_t render_format;
+
+
+enum {
+ FILE_WAV = 1,
+ FILE_MP3,
+ FILE_AAC,
+ FILE_AAC_ADTS,
+ FILE_FLAC,
+ FILE_ALAC,
+ FILE_VORBIS,
+ FILE_WMA,
+ FILE_AC3,
+ FILE_AAC_LATM,
+ FILE_EAC3,
+ FILE_EAC3_JOC,
+ FILE_DTS,
+ FILE_MP2,
+ FILE_APTX,
+ FILE_TRUEHD,
+ FILE_IEC61937
+};
+
+typedef enum {
+ USB_MODE_DEVICE,
+ USB_MODE_HOST,
+ USB_MODE_NONE
+} usb_mode_type_t;
+
+typedef enum {
+ AAC_LC = 1,
+ AAC_HE_V1,
+ AAC_HE_V2,
+ AAC_LOAS
+} aac_format_type_t;
+
+typedef enum {
+ WMA = 1,
+ WMA_PRO,
+ WMA_LOSSLESS
+} wma_format_type_t;
+
+struct audio_config_params {
+ qahw_module_handle_t *qahw_mod_handle;
+ audio_io_handle_t handle;
+ audio_devices_t input_device;
+ audio_config_t config;
+ audio_input_flags_t flags;
+ const char* kStreamName ;
+ audio_source_t kInputSource;
+ char *file_name;
+ volatile bool thread_exit;
+};
+
+typedef struct {
+ qahw_module_handle_t *qahw_in_hal_handle;
+ qahw_module_handle_t *qahw_out_hal_handle;
+ audio_io_handle_t handle;
+ char* filename;
+ FILE* file_stream;
+ char* timestamp_filename;
+ FILE* timestamp_file_ptr;
+ FILE* framesize_file_ptr;
+ int filetype;
+ int stream_index;
+ audio_devices_t output_device;
+ audio_devices_t input_device;
+ audio_config_t config;
+ audio_output_flags_t flags;
+ qahw_stream_handle_t* out_handle;
+ qahw_stream_handle_t* in_handle;
+ int channels;
+ aac_format_type_t aac_fmt_type;
+ wma_format_type_t wma_fmt_type;
+ char *kvpair_values;
+ bool flags_set;
+ usb_mode_type_t usb_mode;
+ int effect_index;
+ int effect_preset_strength;
+ bool drift_query;
+ bool drift_correction;
+ bool play_later;
+ char *device_url;
+ thread_func_t ethread_func;
+ thread_data_t *ethread_data;
+ cmd_data_t cmd_data;
+ int bytes_to_read;
+ qap_module_handle_t qap_module_handle;
+ bool sec_input;
+ bool system_input;
+ pthread_cond_t write_cond;
+ pthread_mutex_t write_lock;
+ pthread_cond_t drain_cond;
+ pthread_mutex_t drain_lock;
+ bool interactive_strm;
+ qahw_mix_matrix_params_t mm_params_pan_scale;
+ qahw_mix_matrix_params_t mm_params_downmix;
+ int mix_ctrl;
+ int pan_scale_ctrl;
+}stream_config;
+
+
+qahw_module_handle_t * load_hal(audio_devices_t dev);
+int unload_hals();
+int get_wav_header_length (FILE* file_stream);
+
+#ifndef QAP
+#define hal_test_qap_usage() (0)
+#define qap_wrapper_get_single_kvp(key, kv_pairs, status) (0)
+#define qap_wrapper_session_open(kv_pairs, stream_data, num_of_streams,\
+ qap_out_hal_handle_t) (0)
+#define qap_wrapper_session_close() (0)
+#define qap_wrapper_stream_open(stream_data) (0)
+#define qap_wrapper_get_cmd_string_from_arg_array(argc, argv, status) (0)
+#define qap_wrapper_start_stream (stream_data) (0)
+#define is_qap_session_active(argc, argv, kvp_string) (0)
+#define get_play_list(fp, stream_param, num_of_streams, kvp_str) (0)
+#define check_for_playlist(kvp_string) (0)
+#define start_playback_through_qap(kvp_string, num_of_streams,\
+ qap_out_hal_handle_t) (0)
+#define start_playback_through_qap_playlist(cmd_kvp_str, num_of_streams,\
+ kvp_string, stream_param, qap_wrapper_session_active,\
+ qap_out_hal_handle_t) (0)
+#else
+void hal_test_qap_usage();
+char * qap_wrapper_get_single_kvp(const char *key, const char *kv_pairs, int *status);
+int qap_wrapper_session_open(char *kv_pairs, void* stream_data, int num_of_streams,\
+ qahw_module_handle_t *qap_out_hal_handle_t);
+int qap_wrapper_session_close();
+qap_module_handle_t qap_wrapper_stream_open(void* stream_data);
+char * qap_wrapper_get_cmd_string_from_arg_array(int argc, char * argv[], int *status);
+void *qap_wrapper_start_stream (void* stream_data);
+void get_file_format(stream_config *stream_info);
+bool is_qap_session_active(int argc, char* argv[], char *kvp_string);
+void get_play_list(FILE *fp, stream_config (*stream_param)[], int *num_of_streams, char *kvp_str[]);
+char* check_for_playlist(char *kvp_string);
+int start_playback_through_qap(char * kvp_string, int num_of_streams,\
+ qahw_module_handle_t *qap_out_hal_handle_t);
+int start_playback_through_qap_playlist(char *cmd_kvp_str[], int num_of_streams,\
+ char *kvp_string, stream_config stream_param[], bool qap_wrapper_session_active,\
+ qahw_module_handle_t *qap_out_hal_handle_t);
+#endif
+#endif /* QAHW_PLAYBACK_TEST_H */
diff --git a/qahw_api/test/qap_wrapper_extn.c b/qahw_api/test/qap_wrapper_extn.c
new file mode 100644
index 0000000..5c76d40
--- /dev/null
+++ b/qahw_api/test/qap_wrapper_extn.c
@@ -0,0 +1,1659 @@
+/*
+ * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright (C) 2015 The Android Open Source Project *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* Test app extension to exercise QAP (Non-tunnel Decode) */
+
+#include <ctype.h>
+#include <errno.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <cutils/properties.h>
+#include <cutils/list.h>
+#include <cutils/log.h>
+#include <cutils/str_parms.h>
+#include <system/audio.h>
+#include <qap_api.h>
+#include <qti_audio.h>
+#include "qahw_playback_test.h"
+
+#undef LOG_TAG
+#define LOG_TAG "HAL_TEST"
+#undef LOG_NDEBUG
+/*#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"
+#else
+#define QAC_LIB_MS12 "/system/lib/libdolby_ms12_wrapper.so"
+#define QAC_LIB_M8 "/system/lib/libdts_m8_wrapper.so"
+#endif
+
+#define SESSION_BLURAY 1
+#define SESSION_BROADCAST 2
+#define MAX_OUTPUT_CHANNELS 8
+#define FRAME_SIZE 32768 /* 32k size */
+#define MAX_BUFFER_SIZE 32768 /* 32k size */
+#define CONTIGUOUS_TIMESTAMP 0x7fffffff
+#define TIMESTAMP_ARRAY_SIZE 2048
+#define DOLBY 1
+#define DTS 2
+#define FRAME_SIZE_FOR_2CH_PCM 6144 /* For 48k samplerate, 2 ch, 2 bytes */
+
+#define MAX_QAP_MODULE_OUT 3
+
+qap_output_config_t qap_out_configs[MAX_QAP_MODULE_OUT];
+bool is_media_fmt_changed[MAX_QAP_MODULE_OUT];
+int new_output_conf_index = 0;
+
+qap_lib_handle_t ms12_lib_handle = NULL;
+qap_lib_handle_t m8_lib_handle = NULL;
+qap_session_handle_t qap_session_handle = NULL;
+qahw_module_handle_t *qap_out_hal_handle = NULL;
+qahw_module_handle_t *qap_out_spk_handle = NULL;
+qahw_module_handle_t *qap_out_hdmi_handle = NULL;
+qahw_module_handle_t *qap_out_hp_handle = NULL;
+
+audio_io_handle_t qap_stream_out_spk_handle = 0x999;
+audio_io_handle_t qap_stream_out_hdmi_handle = 0x998;
+audio_io_handle_t qap_stream_out_hp_handle = 0x997;
+audio_io_handle_t qap_stream_out_cmpr_handle = 0x996;
+
+FILE *fp_output_writer_spk = NULL;
+FILE *fp_output_writer_hp = NULL;
+FILE *fp_output_writer_hdmi = NULL;
+FILE *fp_output_timestamp_file = NULL;
+unsigned char data_buf[MAX_BUFFER_SIZE];
+uint32_t output_device_id = 0;
+uint16_t input_streams_count = 0;
+
+bool hdmi_connected = false;
+bool play_through_bt = false;
+bool encode = false;
+bool dolby_formats = false;
+bool timestamp_mode = false;
+int data_write_count = 0;
+int data_callback_count = 0;
+bool play_list = false;
+int play_list_cnt = 0;
+uint8_t session_type = SESSION_BLURAY;
+
+pthread_t main_input_thread;
+pthread_attr_t main_input_thrd_attr;
+pthread_cond_t main_eos_cond;
+pthread_mutex_t main_eos_lock;
+pthread_cond_t sec_eos_cond;
+pthread_mutex_t sec_eos_lock;
+
+qap_session_outputs_config_t session_output_config;
+bool session_output_configured = false;
+struct timeval tcold_start, tcold_stop;
+struct timeval tcont_ts1, tcont_ts2;
+double cold_start, cold_stop;
+long int data_callback_ts_arr[TIMESTAMP_ARRAY_SIZE];
+long int data_input_ts_arr[TIMESTAMP_ARRAY_SIZE];
+double data_input_st_arr[TIMESTAMP_ARRAY_SIZE];
+double data_callback_st_arr[TIMESTAMP_ARRAY_SIZE];
+bool has_system_input = false;
+char session_kv_pairs[256];
+bool stream_close = false;
+uint32_t dsp_latency = 0;
+
+static int get_qap_out_config_index_for_id(int32_t out_id)
+{
+ int index = -1, i;
+
+ for (i = 0; i < MAX_QAP_MODULE_OUT; i++)
+ if (qap_out_configs[i].id == out_id)
+ index = i;
+
+ return index;
+}
+
+static void update_combo_dev_kvpairs()
+{
+ bool enable_spk = false;
+ bool enable_hp = false;
+ bool enable_hdmi = false;
+ bool combo_enabled = false;
+ char dev_kv_pair[16] = {0};
+
+ ALOGV("%s:%d output device id %d", __func__, __LINE__, output_device_id);
+
+ if (output_device_id & AUDIO_DEVICE_OUT_HDMI)
+ enable_hdmi = true;
+ if (output_device_id & AUDIO_DEVICE_OUT_WIRED_HEADPHONE)
+ enable_hp = true;
+ if (output_device_id & AUDIO_DEVICE_OUT_SPEAKER)
+ enable_spk = true;
+
+ // Update the kv_pair based on the output device selsction
+ // To select hdmi, spekaer and headphone: o_device=1,2,8
+ // To select hdmi, headphone: o_device=2,8
+ // To select hdmi, spekaer : o_device=1,8
+ // To select spekaer and headphone: o_device=1,2
+ if (enable_hdmi && enable_hp && enable_spk) {
+ sprintf(dev_kv_pair, "o_device=1,2,8");
+ combo_enabled = true;
+ } else if (enable_hdmi && enable_hp) {
+ sprintf(dev_kv_pair, "o_device=2,8");
+ combo_enabled = true;
+ } else if (enable_hdmi && enable_spk) {
+ sprintf(dev_kv_pair, "o_device=1,8");
+ combo_enabled = true;
+ } else if (enable_hp && enable_spk) {
+ sprintf(dev_kv_pair, "o_device=1,2");
+ combo_enabled = true;
+ }
+
+ if (combo_enabled)
+ strcat(session_kv_pairs, dev_kv_pair);
+
+ ALOGV("%s:%d session set param %s and combo_enabled %d", __func__, __LINE__, session_kv_pairs, combo_enabled);
+ return;
+}
+
+static void update_kvpairs_for_encode(int out_device_id) {
+ uint8_t device_id;
+ char command[64];
+ if (out_device_id == AUDIO_DEVICE_OUT_HDMI)
+ device_id = 8;
+ switch (render_format) {
+ case 1:
+ sprintf(command, "o_device=%d;od=;", device_id);
+ strcat(session_kv_pairs, command);
+ encode = true;
+ break;
+ case 2:
+ sprintf(command, "o_device=%d;odp=;", device_id);
+ strcat(session_kv_pairs, command);
+ encode = true;
+ break;
+ case 3:
+ sprintf(command, "o_device=%d;render_format=odts;enabletransencode;", device_id);
+ strcat(session_kv_pairs, command);
+ encode = true;
+ break;
+ default:
+ encode = false;
+ break;
+ }
+ ALOGV("%s::%d output device %d and session set params %s", __func__, __LINE__, out_device_id, session_kv_pairs);
+ return;
+}
+
+static void qap_wrapper_create_multi_channel_dump(char *path) {
+ fp_output_writer_hdmi = fopen(path,"wb");
+ if (fp_output_writer_hdmi)
+ fprintf(stdout, "output file ::%s has been generated.\n", path);
+ else
+ fprintf(stderr, "Failed open hdmi dump file\n");
+}
+
+/*
+ * cold_time_latency is the time difference between the session open
+ * and the first data output received from decoder.
+ *
+ * cont_time_latency is the avg time taken to decode the input buffers
+ * i.e. avg of the time differences between the time the input buffer feeded
+ * and the time the o/p buffer received
+ */
+static void qap_wrapper_measure_kpi_values(double cold_start, double cold_stop)
+{
+ int i=0, m=0, j=0;
+ int cnt = 0;
+ double syst_time_arr[TIMESTAMP_ARRAY_SIZE];
+ double total_lat = 0;
+ double cold_time_latency, cont_time_latency;
+ cold_time_latency = cold_stop - cold_start;
+ memset(syst_time_arr,0, sizeof(syst_time_arr));
+
+ if (data_write_count > TIMESTAMP_ARRAY_SIZE)
+ data_write_count = TIMESTAMP_ARRAY_SIZE;
+ if (data_callback_count > TIMESTAMP_ARRAY_SIZE)
+ data_callback_count = TIMESTAMP_ARRAY_SIZE;
+
+ for (i = 6; i < data_write_count; i++) {
+ for(j = 6; j < ((data_callback_count < TIMESTAMP_ARRAY_SIZE) ? data_callback_count : TIMESTAMP_ARRAY_SIZE); j++) {
+ if( abs(data_input_ts_arr[i] - data_callback_ts_arr[j]) <= 4000) {
+ syst_time_arr[cnt++] = (data_callback_st_arr[j] - data_input_st_arr[i]);
+ }
+ }
+ }
+
+ for(m = 0; m < cnt; m++) {
+ total_lat += syst_time_arr[m];
+ ALOGV("%d system time diff %lf", __LINE__, syst_time_arr[m]);
+ }
+ cont_time_latency = total_lat/(cnt);
+ fprintf(stdout, "cold time latency %lf ms, avg cont time latency %lf ms,"
+ "total cont time latency %f ms, total count %d\n",
+ cold_time_latency, cont_time_latency, total_lat, cnt);
+ if (dsp_latency)
+ fprintf(stdout, "Dsp latency = %lu ms \n", dsp_latency);
+}
+
+static void qap_wrapper_read_frame_size_from_file(qap_audio_buffer_t *buffer, FILE *fp_framesize)
+{
+ if (NULL != fp_framesize) {
+ char tempstr[100];
+ fgets(tempstr, sizeof(tempstr), fp_framesize);
+ buffer->common_params.size = atoi(tempstr);
+ }
+}
+
+static void read_bytes_timestamps_from_file(qap_audio_buffer_t *buffer, FILE *fp_timestamp, FILE *fp_input_file)
+{
+ if (NULL != fp_timestamp) {
+ char tempstr[100] = {0};
+ int seek_offset = 0;
+ fgets(tempstr, sizeof(tempstr), fp_timestamp);
+ printf("%s and tempstr is %s \n", __FUNCTION__, tempstr);
+ char * token = strtok(tempstr, ",");
+ if (token != NULL) {
+ buffer->common_params.size = atoi(token);
+ if(token!= NULL) {
+ token = strtok(NULL, ",");
+ if (token!= NULL) {
+ buffer->common_params.timestamp = atoi(token);
+ ALOGV("%s and timestamp to be pushed to queue is %lld", __FUNCTION__, buffer->common_params.timestamp);
+ }
+ token = strtok(NULL, ",");
+ if (token != NULL) {
+ seek_offset = atoi(token);
+ if (fp_input_file && seek_offset > 0)
+ fseek(fp_input_file, seek_offset, SEEK_CUR);
+ }
+ }
+ } else {
+ buffer->common_params.timestamp = CONTIGUOUS_TIMESTAMP;
+ buffer->common_params.size = 0;
+ }
+ }
+}
+
+bool is_qap_session_active(int argc, char* argv[], char *kvp_string) {
+ char *qap_kvp = NULL;
+ char *cmd_str = NULL;
+ char *tmp_str = NULL;
+ int status = 0;
+ cmd_str = (char *)qap_wrapper_get_cmd_string_from_arg_array(argc, argv, &status);
+ if (status > 0) {
+ qap_kvp = qap_wrapper_get_single_kvp("qap", cmd_str, &status);
+ if (qap_kvp == NULL) {
+ return false;
+ }
+ strncpy(kvp_string, cmd_str, strlen(cmd_str));
+ if (cmd_str != NULL) {
+ free(cmd_str);
+ cmd_str = NULL;
+ }
+ }
+ return true;
+}
+
+char* check_for_playlist(char *kvp_string) {
+ char *file_str = NULL;
+ char *tmp_str = NULL;
+ char *play_list = NULL;
+ int len = 0;
+
+ tmp_str = strstr(kvp_string, "g=/");
+ if (tmp_str != NULL) {
+ file_str = strstr(kvp_string, ".txt");
+ len = file_str - tmp_str;
+ play_list = (char*) malloc(sizeof(char) * (len+4));
+ memset(play_list, '\0', len+4);
+ strncpy(play_list, tmp_str+2, len+2);
+ }
+ return play_list;
+}
+
+int start_playback_through_qap_playlist(char *cmd_kvp_str[], int num_of_streams, char *kvp_string, stream_config stream_param[],
+ bool qap_wrapper_session_active, qahw_module_handle_t *hal_handle) {
+ stream_config *stream = NULL;
+ int rc = 0;
+ bool broad_cast = false, bd = false;
+ int i = 0, curr_clip_type = DOLBY, prev_clip_type;
+
+ if (strstr(kvp_string, "broadcast"))
+ broad_cast = true;
+ else if(strstr(kvp_string, "bd"))
+ bd = true;
+ do {
+ fprintf(stdout, "cmd_kvp_string is %s kvp_string %s and num_of_streams %d\n", cmd_kvp_str[i], kvp_string, num_of_streams);
+ stream = &stream_param[i];
+ fprintf(stdout, "stream->filename is %s\n", stream->filename);
+ if (stream->filename) {
+ prev_clip_type = curr_clip_type;
+ if ((stream->file_stream = fopen(stream->filename, "r"))== NULL) {
+ fprintf(stderr, "Cannot open audio file %s\n", stream->filename);
+ return -EINVAL;
+ }
+ if (strstr(stream->filename, ".dts")) {
+ curr_clip_type = DTS;
+ } else {
+ curr_clip_type = DOLBY;
+ }
+ }
+ get_file_format(stream);
+ fprintf(stdout, "Playing from:%s\n", stream->filename);
+ qap_module_handle_t qap_module_handle = NULL;
+ if ((bd || (prev_clip_type != curr_clip_type)) && qap_wrapper_session_active) {
+ fprintf(stdout, " prev_clip_type is %d curr_clip_type is %d\n", prev_clip_type, curr_clip_type);
+ qap_wrapper_session_close();
+ qap_wrapper_session_active = false;
+ }
+ if (!qap_wrapper_session_active) {
+ if (broad_cast) {
+ cmd_kvp_str[i] = realloc(cmd_kvp_str[i], strlen(cmd_kvp_str[i])+11);
+ strcat(strcat(cmd_kvp_str[i], ";"), "broadcast");
+ } else if (bd) {
+ cmd_kvp_str[i] = realloc(cmd_kvp_str[i], strlen(cmd_kvp_str[i])+4);
+ strcat(strcat(cmd_kvp_str[i], ";"), "bd");
+ }
+ rc = qap_wrapper_session_open(cmd_kvp_str[i], stream, num_of_streams, hal_handle);
+ if (rc != 0) {
+ fprintf(stderr, "Session Open failed\n");
+ return -EINVAL;
+ }
+ qap_wrapper_session_active = true;
+ }
+
+ if (qap_wrapper_session_active) {
+ stream->qap_module_handle = qap_wrapper_stream_open(stream);
+ if (stream->qap_module_handle == NULL) {
+ fprintf(stderr, "QAP Stream open Failed\n");
+ } else {
+ fprintf(stdout, "QAP module handle is %p and file name is %s\n", stream->qap_module_handle, stream->filename);
+ qap_wrapper_start_stream(&stream_param[i]);
+ free(stream->filename);
+ stream->filename = NULL;
+ free(cmd_kvp_str[i]);
+ cmd_kvp_str[i] = NULL;
+ }
+ }
+ i++;
+ while (!stream_close) {
+ usleep(50000);
+ fprintf(stderr, "QAP Stream not closed\n");
+ }
+ fprintf(stderr, "QAP Stream closed\n");
+ } while (i <num_of_streams);
+ if (broad_cast && qap_wrapper_session_active) {
+ qap_wrapper_session_close();
+ qap_wrapper_session_active = false;
+ }
+ return 0;
+}
+
+#ifdef QAP
+char *qap_wrapper_get_single_kvp(const char *key, const char *kv_pairs, int *status)
+{
+ char *kvp = NULL;
+ char *tempstr = NULL;
+ char *token = NULL;
+ char *context1 = NULL;
+ char *context2 = NULL;
+ char *temp_kvp = NULL;
+ char *temp_key = NULL;
+
+ if (NULL == key || NULL == kv_pairs) {
+ *status = -EINVAL;
+ return NULL;
+ }
+ tempstr = strdup(kv_pairs);
+ token = strtok_r(tempstr, ";", &context1);
+ if (token != NULL) {
+ temp_kvp = strdup(token);
+ if (temp_kvp != NULL) {
+ temp_key = strtok_r(temp_kvp, "=", &context2);
+ if (!strncmp(key, temp_key, strlen(key))) {
+ kvp = malloc((strlen(token) + 1) * sizeof(char));
+ memset(kvp, 0, strlen(token) + 1);
+ strncat(kvp, token, strlen(token));
+ return kvp;
+ }
+ free(temp_kvp);
+ }
+ while (token != NULL) {
+ token = strtok_r(NULL, ";", &context1);
+ if (token != NULL) {
+ temp_kvp = strdup(token);
+ if (temp_kvp != NULL) {
+ temp_key = strtok_r(temp_kvp, "=", &context2);
+ if (!strncmp(key, temp_key, strlen(key))) {
+ kvp = malloc((strlen(token) + 1) * sizeof(char));
+ memset(kvp, 0, strlen(token) + 1);
+ strncat(kvp, token, strlen(token));
+ return kvp;
+ }
+ free(temp_kvp);
+ temp_kvp = NULL;
+ }
+ }
+ }
+ free(tempstr);
+ }
+ return NULL;
+}
+#endif
+
+int *qap_wrapper_get_int_value_array(const char *kvp, int *count, int *status __unused)
+{
+ char *tempstr1;
+ char *tempstr2;
+ char *l1;
+ char *l2 __unused;
+ char *ctx1;
+ char *ctx2 __unused;
+ int *val = NULL;
+ int i = 0;
+ char *s;
+ char *endstr;
+ int temp = 0;
+ char *jump;
+
+ *count = 0;
+ if (kvp == NULL) {
+ return NULL;
+ }
+ tempstr1 = strdup(kvp);
+ l1 = strtok_r(tempstr1, "=", &ctx1);
+ if (l1 != NULL) {
+ /* jump from key to value */
+ l1 = strtok_r(NULL, "=", &ctx1);
+ if (l1 != NULL) {
+ tempstr2 = strdup(l1);
+
+ s = tempstr2;
+ for (i=0; s[i]; s[i]==',' ? i++ : *s++);
+
+ temp = i;
+ val = malloc((i + 1)*sizeof(int));
+ i = 0;
+ val[i++] = strtol(tempstr2, &endstr, 0);
+
+ while (i <= temp) {
+ jump = endstr + 1;
+ val[i++] = strtol(jump, &endstr, 0);
+ }
+ free(tempstr2);
+ }
+ }
+ free(tempstr1);
+ *count = i;
+ return val;
+}
+
+char * qap_wrapper_get_cmd_string_from_arg_array(int argc, char * argv[], int *status)
+{
+ char * kvps;
+ int idx;
+ int has_key = 0;
+ int mem = 0;
+
+ fprintf(stdout, "%s %d in", __func__, __LINE__);
+ if (argc < 2 || NULL == argv) {
+ fprintf(stdout, "%s %d returning EINVAL\n", __func__, __LINE__);
+ *status = -EINVAL;
+ return NULL;
+ }
+
+ for (idx = 0; idx < argc; idx++) {
+ mem += (strlen(argv[idx]) + 2); /* Extra byte to insert delim ';' */
+ }
+
+ if (mem > 0)
+ kvps = calloc(1, mem * sizeof(char));
+ else {
+ *status = -EINVAL;
+ fprintf(stdout, "%s %d returning EINVAL\n", __func__, __LINE__);
+ return NULL;
+ }
+
+ if (NULL == kvps) {
+ *status = -ENOMEM;
+ fprintf(stdout, "%s %d returning EINVAL\n", __func__, __LINE__);
+ return NULL;
+ }
+
+ for (idx = 1; idx < argc; idx++) {
+ if (( argv[idx][0] == '-') &&
+ (argv[idx][1] < '0' || argv[idx][1] > '9')) {
+ if (has_key) {
+ strcat(kvps, ";");
+ has_key = 0;
+ }
+ strcat(kvps, argv[idx]+1);
+ strcat(kvps, "=");
+ has_key = 1;
+ } else if (has_key) {
+ strcat(kvps, argv[idx]);
+ strcat(kvps, ";");
+ has_key = 0;
+ } else {
+ *status = -EINVAL;
+ if (kvps != NULL) {
+ free(kvps);
+ kvps = NULL;
+ }
+ fprintf(stdout, "%s %d returning EINVAL\n", __func__, __LINE__);
+ return NULL;
+ }
+ }
+ *status = mem;
+ fprintf(stdout, "%s %d returning\n", __func__, __LINE__);
+ return kvps;
+}
+
+static int qap_wrapper_map_input_format(audio_format_t audio_format, qap_audio_format_t *format)
+{
+ if (audio_format == AUDIO_FORMAT_AC3) {
+ *format = QAP_AUDIO_FORMAT_AC3;
+ fprintf(stdout, "File Format is AC3!\n");
+ } else if (audio_format == AUDIO_FORMAT_E_AC3) {
+ *format = QAP_AUDIO_FORMAT_EAC3;
+ fprintf(stdout, "File Format is E_AC3!\n");
+ } else if ((audio_format == AUDIO_FORMAT_AAC_ADTS_LC) ||
+ (audio_format == AUDIO_FORMAT_AAC_ADTS_HE_V1) ||
+ (audio_format == AUDIO_FORMAT_AAC_ADTS_HE_V2) ||
+ (audio_format == AUDIO_FORMAT_AAC_LC) ||
+ (audio_format == AUDIO_FORMAT_AAC_HE_V1) ||
+ (audio_format == AUDIO_FORMAT_AAC_HE_V2) ||
+ (audio_format == AUDIO_FORMAT_AAC_LATM_LC) ||
+ (audio_format == AUDIO_FORMAT_AAC_LATM_HE_V1) ||
+ (audio_format == AUDIO_FORMAT_AAC_LATM_HE_V2)) {
+ *format = QAP_AUDIO_FORMAT_AAC_ADTS;
+ fprintf(stdout, "File Format is AAC!\n");
+ } else if (audio_format == AUDIO_FORMAT_DTS) {
+ *format = QAP_AUDIO_FORMAT_DTS;
+ fprintf(stdout, "File Format is DTS!\n");
+ } else if (audio_format == AUDIO_FORMAT_DTS_HD) {
+ *format = QAP_AUDIO_FORMAT_DTS_HD;
+ fprintf(stdout, "File Format is DTS_HD!\n");
+ } else if (audio_format == AUDIO_FORMAT_PCM_16_BIT) {
+ *format = QAP_AUDIO_FORMAT_PCM_16_BIT;
+ fprintf(stdout, "File Format is PCM_16!\n");
+ } else if (audio_format == AUDIO_FORMAT_PCM_32_BIT) {
+ *format = QAP_AUDIO_FORMAT_PCM_32_BIT;
+ fprintf(stdout, "File Format is PCM_32!\n");
+ } else if (audio_format == AUDIO_FORMAT_PCM_24_BIT_PACKED) {
+ *format = QAP_AUDIO_FORMAT_PCM_24_BIT_PACKED;
+ fprintf(stdout, "File Format is PCM_24!\n");
+ } else if ((audio_format == AUDIO_FORMAT_PCM_8_BIT) ||
+ (audio_format == AUDIO_FORMAT_PCM_8_24_BIT)) {
+ *format = QAP_AUDIO_FORMAT_PCM_8_24_BIT;
+ fprintf(stdout, "File Format is PCM_8_24!\n");
+ } else {
+ fprintf(stdout, "File Format not supported!\n");
+ return -EINVAL;
+ }
+ return 0;
+}
+
+char *get_string_value(const char *kvp, int *status)
+{
+ char *tempstr1 = NULL;
+ char *tempstr2 = NULL;
+ char *l1;
+ char *ctx1;
+ if (kvp == NULL)
+ return NULL;
+ tempstr1 = strdup(kvp);
+ l1 = strtok_r(tempstr1, "=", &ctx1);
+ if (l1 != NULL) {
+ /* jump from key to value */
+ l1 = strtok_r(NULL, "=", &ctx1);
+ if (l1 != NULL)
+ tempstr2 = strdup(l1);
+ }
+ free(tempstr1);
+ return tempstr2;
+}
+
+int qap_wrapper_write_to_hal(qahw_stream_handle_t* out_handle, char *data, size_t bytes)
+{
+ ssize_t ret;
+ qahw_out_buffer_t out_buf;
+
+ memset(&out_buf,0, sizeof(qahw_out_buffer_t));
+ out_buf.buffer = data;
+ out_buf.bytes = bytes;
+
+ ret = qahw_out_write(out_handle, &out_buf);
+ if (ret < 0)
+ fprintf(stderr, "%s::%d: writing data to hal failed (ret = %zd)\n", __func__, __LINE__, ret);
+ else if (ret != bytes)
+ fprintf(stdout, "%s::%d provided bytes %zd, written bytes %d\n",__func__, __LINE__, bytes, ret);
+
+ return ret;
+}
+
+static void close_output_streams()
+{
+ int ret;
+ if (qap_out_hal_handle && qap_out_spk_handle) {
+ ret = qahw_out_standby(qap_out_spk_handle);
+ if (ret)
+ fprintf(stderr, "%s::%d: out standby failed %d \n", __func__, __LINE__, ret);
+ if (play_through_bt) {
+ fprintf(stdout, "%s::%d: disconnecting BT\n", __func__, __LINE__);
+ char param[100] = {0};
+ snprintf(param, sizeof(param), "%s=%d", "disconnect", AUDIO_DEVICE_OUT_BLUETOOTH_A2DP);
+ qahw_set_parameters(qap_out_hal_handle, param);
+ }
+ fprintf(stdout, "%s::%d: closing output stream\n", __func__, __LINE__);
+ ret = qahw_close_output_stream(qap_out_spk_handle);
+ if (ret)
+ fprintf(stderr, "%s::%d: could not close output stream, error - %d\n", __func__, __LINE__, ret);
+ qap_out_spk_handle = NULL;
+ }
+ if (qap_out_hal_handle && qap_out_hp_handle) {
+ ret = qahw_out_standby(qap_out_hp_handle);
+ if (ret)
+ fprintf(stderr, "%s::%d: out standby failed %d \n", __func__, __LINE__, ret);
+ fprintf(stdout, "%s::%d: closing output stream\n", __func__, __LINE__);
+ ret = qahw_close_output_stream(qap_out_hp_handle);
+ if (ret)
+ fprintf(stderr, "%s::%d: could not close output stream, error - %d\n", __func__, __LINE__, ret);
+ qap_out_hp_handle = NULL;
+ }
+ if (qap_out_hal_handle && qap_out_hdmi_handle) {
+ char param[100] = {0};
+ snprintf(param, sizeof(param), "%s=%d", "disconnect", AUDIO_DEVICE_OUT_HDMI);
+ ret = qahw_out_standby(qap_out_hdmi_handle);
+ if (ret)
+ fprintf(stderr, "%s::%d: out standby failed %d\n", __func__, __LINE__, ret);
+ qahw_set_parameters(qap_out_hal_handle, param);
+ fprintf(stdout, "%s::%d: closing output stream\n", __func__, __LINE__);
+ ret = qahw_close_output_stream(qap_out_hdmi_handle);
+ if (ret)
+ fprintf(stderr, "%s::%d: could not close output stream, error - %d\n", __func__, __LINE__, ret);
+ qap_out_hdmi_handle = NULL;
+ }
+ stream_close = true;
+}
+
+void qap_wrapper_session_callback(qap_session_handle_t session_handle __unused, void* priv_data __unused, qap_callback_event_t event_id, int size __unused, void *data)
+{
+ int ret = 0;
+ int bytes_written = 0;
+ int bytes_remaining = 0;
+ int offset = 0;
+ audio_output_flags_t flags;
+ flags = (AUDIO_OUTPUT_FLAG_NON_BLOCKING |
+ AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD |
+ AUDIO_OUTPUT_FLAG_DIRECT);
+ ALOGV("%s %d Received event id %d\n", __func__, __LINE__, event_id);
+ switch (event_id) {
+ case QAP_CALLBACK_EVENT_EOS:
+ ALOGV("%s %d Received Main Input EOS", __func__, __LINE__);
+ pthread_mutex_lock(&main_eos_lock);
+ pthread_cond_signal(&main_eos_cond);
+ pthread_mutex_unlock(&main_eos_lock);
+
+ ALOGE("%s %d Received Main Input EOS ", __func__, __LINE__);
+ if (!stream_close)
+ close_output_streams();
+ if (play_list_cnt && input_streams_count) {
+ play_list_cnt--;
+ input_streams_count = 0;
+ }
+ break;
+ case QAP_CALLBACK_EVENT_EOS_ASSOC:
+ case QAP_CALLBACK_EVENT_MAIN_2_EOS:
+ if (!has_system_input){
+ ALOGV("%s %d Received Secondary Input EOS", __func__, __LINE__);
+ pthread_mutex_lock(&sec_eos_lock);
+ pthread_cond_signal(&sec_eos_cond);
+ pthread_mutex_unlock(&sec_eos_lock);
+ }
+ break;
+ case QAP_CALLBACK_EVENT_ERROR:
+ break;
+ case QAP_CALLBACK_EVENT_SUCCESS:
+ break;
+ case QAP_CALLBACK_EVENT_METADATA:
+ break;
+ case QAP_CALLBACK_EVENT_OUTPUT_CFG_CHANGE:
+ if (data != NULL) {
+ qap_audio_buffer_t *buffer = (qap_audio_buffer_t *) data;
+ qap_output_config_t *new_conf = &buffer->buffer_parms.output_buf_params.output_config;
+ qap_output_config_t *cached_conf = NULL;
+ int index = -1;
+
+ ALOGV("%s %d Received Output cfg change", __func__, __LINE__);
+ if (buffer) {
+ index = get_qap_out_config_index_for_id(
+ buffer->buffer_parms.output_buf_params.output_id);
+ if (index < 0 && new_output_conf_index < MAX_QAP_MODULE_OUT) {
+ index = new_output_conf_index;
+ cached_conf = &qap_out_configs[index];
+ new_output_conf_index++;
+ }
+ }
+
+ if (cached_conf == NULL) {
+ ALOGE("Maximum output from QAP is reached");
+ return;
+ }
+ if (memcmp(cached_conf, new_conf, sizeof(qap_output_config_t)) != 0) {
+ memcpy(cached_conf, new_conf, sizeof(qap_output_config_t));
+ cached_conf->id = buffer->buffer_parms.output_buf_params.output_id;
+ is_media_fmt_changed[index] = true;
+ }
+ }
+ break;
+ case QAP_CALLBACK_EVENT_DATA:
+ if (data != NULL) {
+ qap_audio_buffer_t *buffer = (qap_audio_buffer_t *) data;
+
+ if (buffer && timestamp_mode) {
+ char ch[100] = {0};
+ if (kpi_mode) {
+ if ((data_callback_count > 5) && (data_callback_count < TIMESTAMP_ARRAY_SIZE)) {
+ gettimeofday(&tcont_ts2, NULL);
+ data_callback_ts_arr[data_callback_count] = buffer->common_params.timestamp;
+ data_callback_st_arr[data_callback_count] = (tcont_ts2.tv_sec) * 1000 + (tcont_ts2.tv_usec) / 1000;
+ ALOGV("%s::%d data size %d, Kpi cont ts2 %lf, buffer timestamp %ld",
+ __func__, __LINE__, buffer->common_params.size,
+ data_callback_st_arr[data_callback_count], data_callback_ts_arr[data_callback_count]);
+ }
+ if (data_callback_count < TIMESTAMP_ARRAY_SIZE)
+ data_callback_count++;
+ }
+ if (fp_output_timestamp_file == NULL) {
+ fp_output_timestamp_file =
+ fopen("/sdcard/output_timestamp_file.txt","w");
+ if(fp_output_timestamp_file) {
+ fprintf(stdout, "output file :: "
+ "/sdcard/output_file_timestamp.txt"
+ " has been generated.");
+ }
+ }
+ if (fp_output_timestamp_file) {
+ sprintf(ch, "%d,%lld\n", buffer->common_params.size, buffer->common_params.timestamp);
+ fprintf(stdout, "%s: %s", __func__, ch);
+ ret = fwrite((char *)&ch, sizeof(char),
+ strlen(ch), fp_output_timestamp_file);
+ fflush(fp_output_timestamp_file);
+ }
+ }
+
+ if (buffer && buffer->common_params.data) {
+ int index = -1;
+ bool is_reopen_stream = false;
+ index = get_qap_out_config_index_for_id(buffer->buffer_parms.output_buf_params.output_id);
+ if (index > -1 && is_media_fmt_changed[index]) {
+ session_output_config.output_config->sample_rate = qap_out_configs[index].sample_rate;
+ session_output_config.output_config->bit_width = qap_out_configs[index].bit_width;
+ session_output_config.output_config->channels = qap_out_configs[index].channels;
+ is_reopen_stream = true;
+ is_media_fmt_changed[index] = false;
+ }
+
+ if (buffer->buffer_parms.output_buf_params.output_id &
+ AUDIO_DEVICE_OUT_HDMI) {
+ if (!hdmi_connected) {
+ char param[100] = {0};
+ snprintf(param, sizeof(param), "%s=%d", "connect", AUDIO_DEVICE_OUT_HDMI);
+ qahw_set_parameters(qap_out_hal_handle, param);
+ hdmi_connected = true;
+ }
+ if (encode) {
+ if (enable_dump && fp_output_writer_hdmi == NULL) {
+ if (buffer->buffer_parms.output_buf_params.output_id ==
+ (AUDIO_FORMAT_E_AC3|AUDIO_DEVICE_OUT_HDMI))
+ qap_wrapper_create_multi_channel_dump("/sdcard/output_hdmi.ddp");
+ else if (buffer->buffer_parms.output_buf_params.output_id ==
+ (AUDIO_FORMAT_AC3|AUDIO_DEVICE_OUT_HDMI))
+ qap_wrapper_create_multi_channel_dump("/sdcard/output_hdmi.dd");
+ else
+ qap_wrapper_create_multi_channel_dump("/sdcard/output_hdmi_dts.dts");
+ }
+ } else {
+ if (enable_dump && fp_output_writer_hdmi == NULL)
+ qap_wrapper_create_multi_channel_dump("/sdcard/output_hdmi.dump");
+ }
+ if (fp_output_writer_hdmi) {
+ ret = fwrite((unsigned char *)buffer->common_params.data, sizeof(unsigned char),
+ buffer->common_params.size, fp_output_writer_hdmi);
+ fflush(fp_output_writer_hdmi);
+ }
+
+ if (is_reopen_stream && qap_out_hdmi_handle) {
+ qahw_close_output_stream(qap_out_hdmi_handle);
+ qap_out_hdmi_handle = NULL;
+ is_reopen_stream = false;
+ }
+
+ if (hdmi_connected && qap_out_hdmi_handle == NULL) {
+ struct audio_config config;
+ audio_devices_t devices;
+
+ config.offload_info.version = AUDIO_INFO_INITIALIZER.version;
+ config.offload_info.size = AUDIO_INFO_INITIALIZER.size;
+ config.sample_rate = config.offload_info.sample_rate =
+ session_output_config.output_config->sample_rate;
+ if (session_output_config.output_config->bit_width == 24) {
+ config.format = config.offload_info.format = AUDIO_FORMAT_PCM_24_BIT_PACKED;
+ config.offload_info.bit_width = 24;
+ } else {
+ config.format = config.offload_info.format = AUDIO_FORMAT_PCM_16_BIT;
+ config.offload_info.bit_width = 16;
+ }
+
+ if (session_output_config.output_config->channels == 2) {
+ config.offload_info.channel_mask = config.channel_mask =
+ AUDIO_CHANNEL_OUT_STEREO;
+ } else {
+ config.offload_info.channel_mask = config.channel_mask =
+ audio_channel_out_mask_from_count(MAX_OUTPUT_CHANNELS);
+ }
+ devices = AUDIO_DEVICE_OUT_HDMI;
+ if (timestamp_mode)
+ flags |= AUDIO_OUTPUT_FLAG_TIMESTAMP;
+ if (encode) {
+ if (buffer->buffer_parms.output_buf_params.output_id ==
+ (AUDIO_FORMAT_AC3|AUDIO_DEVICE_OUT_HDMI))
+ config.format = config.offload_info.format = AUDIO_FORMAT_AC3;
+ else if (buffer->buffer_parms.output_buf_params.output_id ==
+ (AUDIO_FORMAT_E_AC3|AUDIO_DEVICE_OUT_HDMI))
+ config.format = config.offload_info.format = AUDIO_FORMAT_E_AC3;
+ else
+ config.format = config.offload_info.format = AUDIO_FORMAT_DTS;
+ ALOGV("%s:%d output format %x", __func__, __LINE__,
+ config.format, config.offload_info.format);
+ ret = qahw_open_output_stream(qap_out_hal_handle, qap_stream_out_cmpr_handle, devices,
+ flags, &config, &qap_out_hdmi_handle, "stream");
+ } else {
+ ret = qahw_open_output_stream(qap_out_hal_handle, qap_stream_out_hdmi_handle, devices,
+ flags, &config, &qap_out_hdmi_handle, "stream");
+ }
+
+ ret = qahw_out_set_volume(qap_out_hdmi_handle, vol_level, vol_level);
+ if (ret < 0)
+ ALOGE("unable to set volume");
+ }
+ if (qap_out_hdmi_handle) {
+ bytes_written = qap_wrapper_write_to_hal(qap_out_hdmi_handle,
+ buffer->common_params.data, buffer->common_params.size);
+ if (bytes_written == -1) {
+ ALOGE("%s::%d write failed in hal", __func__, __LINE__);
+ }
+ if (kpi_mode && data_callback_count == 6)
+ dsp_latency = qahw_out_get_latency(qap_out_hdmi_handle);
+ }
+ if (kpi_mode && data_callback_count == 1) {
+ gettimeofday(&tcold_stop, NULL);
+ cold_stop = (tcold_stop.tv_sec) * 1000 + (tcold_stop.tv_usec) / 1000;
+ ALOGD("%s::%d Measuring Kpi cold stop %lf", __func__, __LINE__, cold_stop);
+ }
+ }
+ if (buffer->buffer_parms.output_buf_params.output_id & AUDIO_DEVICE_OUT_WIRED_HEADPHONE) {
+ if (enable_dump && fp_output_writer_hp == NULL) {
+ fp_output_writer_hp =
+ fopen("/sdcard/output_hp.dump","wb");
+ if (fp_output_writer_hp) {
+ fprintf(stdout, "output file :: "
+ "/sdcard/output_hp.dump"
+ " has been generated.\n");
+ } else {
+ fprintf(stderr, "Failed open hp dump file\n");
+ }
+ }
+ if (fp_output_writer_hp) {
+ ret = fwrite((unsigned char *)buffer->common_params.data, sizeof(unsigned char),
+ buffer->common_params.size, fp_output_writer_hp);
+ fflush(fp_output_writer_hp);
+ }
+ if (is_reopen_stream && qap_out_hp_handle) {
+ qahw_close_output_stream(qap_out_hp_handle);
+ qap_out_hp_handle = NULL;
+ is_reopen_stream = false;
+ }
+
+ if (qap_out_hp_handle == NULL) {
+ struct audio_config config;
+ audio_devices_t devices;
+ config.offload_info.version = AUDIO_INFO_INITIALIZER.version;
+ config.offload_info.size = AUDIO_INFO_INITIALIZER.size;
+ config.sample_rate = config.offload_info.sample_rate =
+ session_output_config.output_config->sample_rate;
+ if (session_output_config.output_config->bit_width == 24) {
+ config.format = config.offload_info.format = AUDIO_FORMAT_PCM_24_BIT_PACKED;
+ config.offload_info.bit_width = 24;
+ } else {
+ config.format = config.offload_info.format = AUDIO_FORMAT_PCM_16_BIT;
+ config.offload_info.bit_width = 16;
+ }
+
+ config.offload_info.channel_mask = config.channel_mask =
+ AUDIO_CHANNEL_OUT_STEREO;
+ devices = AUDIO_DEVICE_OUT_LINE;//ToDO - Need to change to AUDIO_DEVICE_OUT_WIRED_HEADPHONE
+
+ if (timestamp_mode)
+ flags |= AUDIO_OUTPUT_FLAG_TIMESTAMP;
+ ret = qahw_open_output_stream(qap_out_hal_handle, qap_stream_out_hp_handle, devices,
+ flags, &config, &qap_out_hp_handle, "stream");
+
+ if (ret) {
+ ALOGE("%s:%d could not open output stream, error - %d", __func__, __LINE__, ret);
+ return;
+ }
+ ret = qahw_out_set_volume(qap_out_hp_handle, vol_level, vol_level);
+ if (ret < 0)
+ ALOGE("unable to set volume");
+ }
+ if (qap_out_hp_handle) {
+ bytes_written = qap_wrapper_write_to_hal(qap_out_hp_handle,
+ buffer->common_params.data, buffer->common_params.size);
+ if (bytes_written == -1) {
+ ALOGE("%s::%d write failed in hal", __func__, __LINE__);
+ }
+ if (kpi_mode && data_callback_count == 6)
+ dsp_latency = qahw_out_get_latency(qap_out_hp_handle);
+ }
+ if (kpi_mode && data_callback_count == 1) {
+ gettimeofday(&tcold_stop, NULL);
+ cold_stop = (tcold_stop.tv_sec) * 1000 + (tcold_stop.tv_usec) / 1000;
+ ALOGD("%s::%d Measuring Kpi cold stop %lf", __func__, __LINE__, cold_stop);
+ }
+ }
+ if (buffer->buffer_parms.output_buf_params.output_id & AUDIO_DEVICE_OUT_SPEAKER) {
+ if (enable_dump && fp_output_writer_spk == NULL) {
+ char ch[4] = {0};
+ fp_output_writer_spk =
+ fopen("/sdcard/output_speaker.dump","wb");
+ if (fp_output_writer_spk) {
+ fprintf(stdout, "output file :: "
+ "/sdcard/output_speaker.dump"
+ " has been generated.\n");
+ if (dolby_formats) {
+ ret = fwrite((unsigned char *)&ch, sizeof(unsigned char),
+ 4, fp_output_writer_spk);
+ }
+ } else {
+ fprintf(stderr, "Failed open speaker dump file\n");
+ }
+ }
+ if (fp_output_writer_spk) {
+ ret = fwrite((unsigned char *)buffer->common_params.data, sizeof(unsigned char),
+ buffer->common_params.size, fp_output_writer_spk);
+ fflush(fp_output_writer_spk);
+ }
+ if (is_reopen_stream && qap_out_spk_handle) {
+ qahw_close_output_stream(qap_out_spk_handle);
+ qap_out_spk_handle = NULL;
+ is_reopen_stream = false;
+ }
+ if (qap_out_spk_handle == NULL) {
+ struct audio_config config;
+ audio_devices_t devices;
+ config.offload_info.version = AUDIO_INFO_INITIALIZER.version;
+ config.offload_info.size = AUDIO_INFO_INITIALIZER.size;
+ config.sample_rate = config.offload_info.sample_rate =
+ session_output_config.output_config->sample_rate;
+ if (session_output_config.output_config->bit_width == 24) {
+ config.format = config.offload_info.format = AUDIO_FORMAT_PCM_24_BIT_PACKED;
+ config.offload_info.bit_width = 24;
+ } else {
+ config.format = config.offload_info.format = AUDIO_FORMAT_PCM_16_BIT;
+ config.offload_info.bit_width = 16;
+ }
+
+ config.offload_info.channel_mask = config.channel_mask =
+ AUDIO_CHANNEL_OUT_STEREO;
+ if (play_through_bt) {
+ fprintf(stderr, "%s::%d: connecting BT\n", __func__, __LINE__);
+ char param[100] = {0};
+ snprintf(param, sizeof(param), "%s=%d", "connect", AUDIO_DEVICE_OUT_BLUETOOTH_A2DP);
+ qahw_set_parameters(qap_out_hal_handle, param);
+ devices = AUDIO_DEVICE_OUT_BLUETOOTH_A2DP;
+ } else {
+ devices = AUDIO_DEVICE_OUT_SPEAKER;
+ }
+ if (timestamp_mode)
+ flags |= AUDIO_OUTPUT_FLAG_TIMESTAMP;
+ ALOGD("%s::%d: open output for device %d", __func__, __LINE__, devices);
+ ret = qahw_open_output_stream(qap_out_hal_handle, qap_stream_out_spk_handle, devices,
+ flags, &config, &qap_out_spk_handle, "stream");
+
+ if (ret) {
+ ALOGE("%s:%d could not open output stream, error - %d", __func__, __LINE__, ret);
+ return;
+ }
+ ret = qahw_out_set_volume(qap_out_spk_handle, vol_level, vol_level);
+ if (ret < 0)
+ ALOGE("unable to set volume");
+ }
+ if (qap_out_spk_handle) {
+ bytes_written = qap_wrapper_write_to_hal(qap_out_spk_handle,
+ buffer->common_params.data, buffer->common_params.size);
+ if (bytes_written == -1) {
+ ALOGE("%s::%d write failed in hal", __func__, __LINE__);
+ }
+ if (kpi_mode && data_callback_count == 6)
+ dsp_latency = qahw_out_get_latency(qap_out_spk_handle);
+ }
+ if (kpi_mode && data_callback_count == 1) {
+ gettimeofday(&tcold_stop, NULL);
+ cold_stop = (tcold_stop.tv_sec) * 1000 + (tcold_stop.tv_usec) / 1000;
+ ALOGD("%s::%d Measuring Kpi cold stop %lf", __func__, __LINE__, cold_stop);
+ }
+ }
+ }
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+static void qap_wrapper_is_dap_enabled(char *kv_pairs, int out_device_id) {
+ int status = 0;
+ int temp = 0;
+ char *dap_kvp = NULL;
+ int *dap_value = NULL;
+ int dap_enable = 0;
+
+ 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);
+ if (dap_value != NULL)
+ dap_enable = dap_value[0];
+ 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) {
+ dev_kvp = (char *) calloc(1, status + strlen("o_device=1; "));
+ if (dev_kvp != NULL) {
+ strcat(dev_kvp, "o_device=1;");
+ strcat(session_kv_pairs, dev_kvp);
+ fprintf(stdout, "session set params %s\n", session_kv_pairs);
+ free(dev_kvp);
+ dev_kvp = NULL;
+ }
+ } else if ((out_device_id == AUDIO_DEVICE_OUT_LINE)||
+ (out_device_id == 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;");
+ strcat(session_kv_pairs, dev_kvp);
+ fprintf(stdout, "session set params %s\n", session_kv_pairs);
+ free(dev_kvp);
+ dev_kvp = NULL;
+ }
+ }
+ }
+ free(dap_kvp);
+ dap_kvp = NULL;
+ }
+}
+
+int qap_wrapper_session_open(char *kv_pairs, void* stream_data, int num_of_streams, qahw_module_handle_t *hal_handle)
+{
+ int status = 0;
+ int ret = 0;
+ int i;
+ int temp = 0;
+ stream_config *stream = (stream_config *)stream_data;
+ char *session_type_kvp = NULL;
+ char *encode_kvp = NULL;
+ int *temp_val = NULL;
+ char *bitwidth_kvp = NULL;
+
+ qap_out_hal_handle = hal_handle;
+ if (kpi_mode) {
+ memset(data_input_st_arr, 0, sizeof(data_input_st_arr));
+ memset(data_input_ts_arr, 0, sizeof(data_input_ts_arr));
+ memset(data_callback_st_arr, 0, sizeof(data_callback_st_arr));
+ memset(data_callback_ts_arr, 0, sizeof(data_callback_ts_arr));
+ gettimeofday(&tcold_start, NULL);
+ cold_start = (tcold_start.tv_sec) * 1000 + (tcold_start.tv_usec) / 1000;
+ ALOGD("%s::%d Measuring Kpi cold start %lf", __func__, __LINE__, cold_start);
+ }
+ if (play_list)
+ play_list_cnt = num_of_streams;
+
+ memset(&session_output_config, 0, sizeof(session_output_config));
+ strcpy(session_kv_pairs, kv_pairs);
+
+ if (NULL != (session_type_kvp = qap_wrapper_get_single_kvp("broadcast", kv_pairs, &status))) {
+ session_type = SESSION_BROADCAST;
+ fprintf(stdout, "Session Type is Broadcast\n");
+ free(session_type_kvp);
+ session_type_kvp = NULL;
+ } else if (NULL != (session_type_kvp = qap_wrapper_get_single_kvp("bd", kv_pairs, &status))) {
+ session_type = SESSION_BLURAY;
+ free(session_type_kvp);
+ session_type_kvp = NULL;
+ fprintf(stdout, "Session Type is Bluray\n");
+ }
+
+ if (session_type == SESSION_BLURAY) {
+ if ((stream->filetype == FILE_WAV) ||
+ (stream->filetype == FILE_AAC)) {
+ fprintf(stderr, "Format is not supported for BD usecase\n");
+ return -EINVAL;
+ }
+ if (!play_list && num_of_streams > 1) {
+ fprintf(stderr, "Please specifiy proper session type\n");
+ return -EINVAL;
+ }
+ }
+
+ if (stream->filetype == FILE_DTS) {
+ m8_lib_handle = (qap_session_handle_t) qap_load_library(QAC_LIB_M8);
+ if (m8_lib_handle == NULL) {
+ fprintf(stdout, "Failed to load M8 library\n");
+ return -EINVAL;
+ }
+ fprintf(stdout, "loaded M8 library\n");
+ dolby_formats = false;
+ } else if ((stream->filetype == FILE_AC3) ||
+ (stream->filetype == FILE_EAC3) ||
+ (stream->filetype == FILE_EAC3_JOC) ||
+ (stream->filetype == FILE_WAV) ||
+ (stream->filetype == FILE_AAC) ||
+ (stream->filetype == FILE_AAC_ADTS) ||
+ (stream->filetype == FILE_AAC_LATM)) {
+ ms12_lib_handle = (qap_session_handle_t) qap_load_library(QAC_LIB_MS12);
+ if (ms12_lib_handle == NULL) {
+ fprintf(stderr, "Failed to load MS12 library\n");
+ return -EINVAL;
+ }
+ 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);
+ if (stream->output_device & AUDIO_DEVICE_OUT_HDMI)
+ update_kvpairs_for_encode(AUDIO_DEVICE_OUT_HDMI);
+
+ if (stream->filetype == FILE_DTS)
+ session_output_config.output_config->bit_width = 24;
+
+ bitwidth_kvp = qap_wrapper_get_single_kvp("bitwidth", kv_pairs, &status);
+ if (bitwidth_kvp != NULL) {
+ temp_val = qap_wrapper_get_int_value_array(bitwidth_kvp, &temp, &status);
+ if (temp_val != NULL) {
+ if (stream->filetype == FILE_DTS)
+ session_output_config.output_config->bit_width = temp_val[0];
+ free(temp_val);
+ temp_val = NULL;
+ }
+ free(bitwidth_kvp);
+ bitwidth_kvp = NULL;
+ }
+
+ if ((session_type == SESSION_BROADCAST) && dolby_formats) {
+ fprintf(stdout, "%s::%d Setting BROADCAST session for dolby formats\n", __func__, __LINE__);
+ qap_session_handle = (qap_session_handle_t) qap_session_open(QAP_SESSION_BROADCAST, ms12_lib_handle);
+ if (qap_session_handle == NULL)
+ return -EINVAL;
+ } else if ((session_type == SESSION_BROADCAST) && !dolby_formats) {
+ fprintf(stdout, "%s::%d Setting BROADCAST session for dts formats\n", __func__, __LINE__);
+ qap_session_handle = (qap_session_handle_t) qap_session_open(QAP_SESSION_BROADCAST, m8_lib_handle);
+ if (qap_session_handle == NULL)
+ return -EINVAL;
+ } else if (session_type == SESSION_BLURAY) {
+ fprintf(stdout, "%s::%d Setting BD session\n", __func__, __LINE__);
+ if (!encode && dolby_formats) {
+ fprintf(stdout, "%s::%d Setting BD session for decoding dolby formats\n", __func__, __LINE__);
+ qap_session_handle = (qap_session_handle_t) qap_session_open(QAP_SESSION_DECODE_ONLY, ms12_lib_handle);
+ if (qap_session_handle == NULL)
+ return -EINVAL;
+ } else if (!encode && !dolby_formats) {
+ fprintf(stdout, "%s::%d Setting BD session for decoding dts formats \n", __func__, __LINE__, qap_session_handle);
+ qap_session_handle = (qap_session_handle_t) qap_session_open(QAP_SESSION_DECODE_ONLY, m8_lib_handle);
+ if (qap_session_handle == NULL)
+ return -EINVAL;
+ } else if (encode && dolby_formats) {
+ fprintf(stdout, "%s::%d Setting BD session for encoding dolby formats \n", __func__, __LINE__, qap_session_handle);
+ qap_session_handle = (qap_session_handle_t) qap_session_open(QAP_SESSION_ENCODE_ONLY, ms12_lib_handle);
+ if (qap_session_handle == NULL)
+ return -EINVAL;
+ } else if (encode && !dolby_formats) {
+ fprintf(stdout, "%s::%d Setting BD session for encoding dts formats \n", __func__, __LINE__, qap_session_handle);
+ qap_session_handle = (qap_session_handle_t) qap_session_open(QAP_SESSION_ENCODE_ONLY, m8_lib_handle);
+ if (qap_session_handle == NULL)
+ return -EINVAL;
+ }
+ }
+
+ ret = qap_session_set_callback(qap_session_handle, &qap_wrapper_session_callback);
+ if (ret != QAP_STATUS_OK) {
+ fprintf(stderr, "!!!! Please specify appropriate Session\n");
+ return -EINVAL;
+ }
+
+ if (!session_output_configured) {
+ session_output_config.output_config->channels = stream->channels;
+ session_output_config.output_config->sample_rate = stream->config.sample_rate;
+ if (session_type == SESSION_BROADCAST)
+ session_output_config.output_config->sample_rate = 48000;
+
+ output_device_id = stream->output_device;
+ if (output_device_id & AUDIO_DEVICE_OUT_BLUETOOTH_A2DP) {
+ output_device_id |= AUDIO_DEVICE_OUT_SPEAKER;
+ play_through_bt = true;
+ }
+ if (output_device_id & AUDIO_DEVICE_OUT_LINE) {
+ output_device_id |= AUDIO_DEVICE_OUT_WIRED_HEADPHONE;
+ }
+ if (encode) {
+ if (render_format == 1)
+ output_device_id |= AUDIO_FORMAT_AC3;
+ else if (render_format == 2)
+ output_device_id |= AUDIO_FORMAT_E_AC3;
+ else if (render_format == 3)
+ output_device_id |= AUDIO_FORMAT_DTS;
+ }
+ session_output_config.output_config->id = output_device_id;
+ update_combo_dev_kvpairs();
+ if (stream->filetype != FILE_DTS)
+ session_output_config.output_config->bit_width = stream->config.offload_info.bit_width;
+ session_output_config.num_output = 1;
+
+ ret = qap_session_cmd(qap_session_handle, QAP_SESSION_CMD_SET_OUTPUTS, sizeof(session_output_config), &session_output_config, NULL, NULL);
+ if (ret != QAP_STATUS_OK) {
+ fprintf(stderr, "Output config failed\n");
+ return -EINVAL;
+ }
+
+ ALOGV("Session set params %s", session_kv_pairs);
+ ret = qap_session_cmd(qap_session_handle, QAP_SESSION_CMD_SET_KVPAIRS, sizeof(session_kv_pairs), session_kv_pairs, NULL, NULL);
+ if (ret != QAP_STATUS_OK) {
+ fprintf(stderr, "Session set params failed\n");
+ return -EINVAL;
+ }
+ usleep(2000);
+ session_output_configured = true;
+ }
+
+ pthread_mutex_init(&main_eos_lock, (const pthread_mutexattr_t *)NULL);
+ pthread_mutex_init(&sec_eos_lock, (const pthread_mutexattr_t *)NULL);
+ pthread_cond_init(&main_eos_cond, (const pthread_condattr_t *) NULL);
+ pthread_cond_init(&sec_eos_cond, (const pthread_condattr_t *) NULL);
+ fprintf(stdout, "Session open returing success\n");
+ return 0;
+}
+
+int qap_wrapper_session_close ()
+{
+ ALOGD("closing QAP session");
+ session_output_configured = false;
+ qap_session_close(qap_session_handle);
+ qap_session_handle = NULL;
+}
+
+void *qap_wrapper_start_stream (void* stream_data)
+{
+ int ret = 0;
+ qap_audio_buffer_t *buffer;
+ int8_t first_read = 1;
+ int bytes_wanted;
+ int bytes_read;
+ int bytes_consumed = 0, status = 0;;
+ qap_module_handle_t qap_module_handle = NULL;
+ stream_config *stream_info = (stream_config *)stream_data;
+ FILE *fp_input = stream_info->file_stream;
+ int is_buffer_available = 0;
+ char *temp_str = NULL;
+ void *reply_data;
+ char* temp_ptr = NULL;
+ qap_audio_format_t format;
+
+ if (fp_input == NULL) {
+ fprintf(stderr, "Open File Failed for %s\n", stream_info->filename);
+ pthread_exit(0);
+ }
+ qap_module_handle = stream_info->qap_module_handle;
+ buffer = (qap_audio_buffer_t *) calloc(1, sizeof(qap_audio_buffer_t));
+ if (buffer == NULL) {
+ fprintf(stderr, "%s::%d: Memory Alloc Error\n", __func__, __LINE__);
+ pthread_exit(0);
+ }
+ buffer->common_params.data = calloc(1, FRAME_SIZE);
+ if (buffer->common_params.data == NULL) {
+ fprintf(stderr, "%s::%d: Memory Alloc Error\n", __func__, __LINE__);
+ pthread_exit(0);
+ if (NULL != buffer) {
+ free( buffer);
+ buffer = NULL;
+ }
+ }
+ buffer->buffer_parms.output_buf_params.output_id = output_device_id;
+ fprintf(stdout, "%s::%d: output device id %d\n",
+ __func__, __LINE__, buffer->buffer_parms.output_buf_params.output_id);
+
+ fprintf(stdout, "Opened Input File %s format %d handle %p\n", stream_info->filename, format, fp_input);
+
+ ret = qap_module_cmd(qap_module_handle, QAP_MODULE_CMD_START, sizeof(QAP_MODULE_CMD_START), NULL, NULL, NULL);
+ if (ret != QAP_STATUS_OK) {
+ fprintf(stderr, "START failed\n");
+ pthread_exit(0);
+ if (NULL != buffer && NULL != buffer->common_params.data) {
+ free( buffer->common_params.data);
+ buffer->common_params.data = NULL;
+ free( buffer);
+ buffer = NULL;
+ }
+ }
+
+ do {
+ if (stream_info->filetype == FILE_WAV) {
+ if (first_read) {
+ first_read = 0;
+ int wav_header_len = get_wav_header_length(stream_info->file_stream);
+ fseek(fp_input, wav_header_len, SEEK_SET);
+ }
+ if (stream_info->channels > 6)
+ stream_info->bytes_to_read = (FRAME_SIZE_FOR_2CH_PCM * 4);
+ else
+ stream_info->bytes_to_read = (FRAME_SIZE_FOR_2CH_PCM * 3);
+ }
+ buffer->buffer_parms.input_buf_params.flags = QAP_BUFFER_NO_TSTAMP;
+ buffer->common_params.timestamp = QAP_BUFFER_NO_TSTAMP;
+ buffer->common_params.size = stream_info->bytes_to_read;
+
+ if (stream_info->timestamp_filename != NULL) {
+ if (!stream_info->timestamp_file_ptr) {
+ stream_info->timestamp_file_ptr = fopen(stream_info->timestamp_filename, "r");
+ if (!stream_info->timestamp_file_ptr) {
+ fprintf(stderr, "Cannot open audio file %s\n", stream_info->filename);
+ goto exit;
+ }
+ }
+ read_bytes_timestamps_from_file(buffer, stream_info->timestamp_file_ptr, fp_input);
+ if (buffer->common_params.timestamp == CONTIGUOUS_TIMESTAMP)
+ buffer->buffer_parms.input_buf_params.flags = QAP_BUFFER_TSTAMP_CONTINUE;
+ else
+ buffer->buffer_parms.input_buf_params.flags = QAP_BUFFER_TSTAMP;
+ timestamp_mode = true;
+ }
+
+ bytes_wanted = buffer->common_params.size;
+ bytes_read = fread(data_buf, sizeof(unsigned char), bytes_wanted, fp_input);
+
+ buffer->common_params.offset = 0;
+ buffer->common_params.size = bytes_read;
+ memcpy(buffer->common_params.data, data_buf, bytes_read);
+ if (bytes_read <= 0) {
+ buffer->buffer_parms.input_buf_params.flags = QAP_BUFFER_EOS;
+ bytes_consumed = qap_module_process(qap_module_handle, buffer);
+ ret = qap_module_cmd(qap_module_handle, QAP_MODULE_CMD_STOP, sizeof(QAP_MODULE_CMD_STOP), NULL, NULL, NULL);
+ fprintf(stdout, "Stopped feeding input %s : %p\n", stream_info->filename, fp_input);
+ ALOGV("Stopped feeding input %s : %p", stream_info->filename, fp_input);
+ break;
+ }
+
+ reply_data = (char*) calloc(1, 100);
+ is_buffer_available = 0;
+ temp_ptr = buffer->common_params.data;
+ int time_index = data_write_count;
+ if (kpi_mode) {
+ if (data_write_count > 5 && data_write_count < TIMESTAMP_ARRAY_SIZE) {
+ gettimeofday(&tcont_ts1, NULL);
+ data_input_ts_arr[data_write_count] = buffer->common_params.timestamp;
+ data_input_st_arr[data_write_count] = (tcont_ts1.tv_sec) * 1000 + (tcont_ts1.tv_usec) / 1000;
+ ALOGV("%s::%d Kpi cont ts1 %lf, buffer timestamp %ld count %d",
+ __func__, __LINE__, data_input_st_arr[data_write_count], data_input_ts_arr[data_write_count], data_write_count);
+ }
+ if (data_write_count < TIMESTAMP_ARRAY_SIZE)
+ data_write_count++;
+ }
+ do {
+ bytes_consumed = qap_module_process(qap_module_handle, buffer);
+ if (bytes_consumed > 0) {
+ buffer->common_params.data += bytes_consumed;
+ buffer->common_params.size -= bytes_consumed;
+ }
+ ALOGV("%s %d feeding Input of size %d and bytes_cosumed is %d",
+ __FUNCTION__, __LINE__,bytes_read, bytes_consumed);
+ if (stream_info->filetype == FILE_DTS) {
+ if (bytes_consumed < 0) {
+ while (!is_buffer_available) {
+ usleep(1000);
+ ret = qap_module_cmd(qap_module_handle, QAP_MODULE_CMD_GET_PARAM,
+ sizeof(QAP_MODULE_CMD_GET_PARAM), "buf_available", NULL, reply_data
+ );
+ if (reply_data)
+ temp_str = get_string_value(reply_data, &status);
+ if (temp_str) {
+ is_buffer_available = atoi(temp_str);
+ free(temp_str);
+ }
+ ALOGV("%s : %d, dts clip reply_data is %d buffer availabale is %d",
+ __FUNCTION__, __LINE__, reply_data, is_buffer_available);
+ }
+
+ if(kpi_mode && time_index > 5) {
+ gettimeofday(&tcont_ts1, NULL);
+ data_input_st_arr[time_index] = (tcont_ts1.tv_sec) * 1000 + (tcont_ts1.tv_usec) / 1000;
+ }
+ }
+ }
+ } while (buffer->common_params.size > 0);
+ if (reply_data)
+ free(reply_data);
+ buffer->common_params.data = temp_ptr;
+ if (!(stream_info->system_input || stream_info->sec_input) && !(kpi_mode)) {
+ usleep(5000); //To swtich between main and secondary threads incase of dual input
+ }
+ } 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);
+ 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);
+ fprintf(stdout, "Received EOS event for main input\n");
+ ALOGV("Received EOS event for main input\n");
+ }
+
+exit:
+ if (NULL != buffer && NULL != buffer->common_params.data) {
+ free( buffer->common_params.data);
+ buffer->common_params.data = NULL;
+ free( buffer);
+ buffer = NULL;
+ }
+ if ((true == play_list) && (0 == play_list_cnt) && qap_out_hal_handle) {
+ ALOGV("%s %d QAP_CALLBACK_EVENT_EOS for play list received and unload_hals", __func__, __LINE__);
+ unload_hals();
+ qap_out_hal_handle = NULL;
+ } else if (!play_list && qap_out_hal_handle) {
+ ALOGV("%s %d QAP_CALLBACK_EVENT_EOS and unload_hals", __func__, __LINE__);
+ unload_hals();
+ qap_out_hal_handle = NULL;
+ }
+ qap_module_deinit(qap_module_handle);
+ if (kpi_mode) {
+ qap_wrapper_measure_kpi_values(cold_start, cold_stop);
+ }
+ fprintf(stdout, "%s::%d , THREAD EXIT \n", __func__, __LINE__);
+ ALOGD("%s::%d , THREAD EXIT \n", __func__, __LINE__);
+ return NULL;
+}
+
+qap_module_handle_t qap_wrapper_stream_open(void* stream_data)
+{
+ qap_module_config_t *input_config = NULL;
+ int ret = 0;
+ int i = 0;
+ stream_config *stream_info = (stream_config *)stream_data;
+ qap_module_handle_t qap_module_handle = NULL;
+
+ input_config = (qap_module_config_t *) calloc(1, sizeof(qap_module_config_t));
+ if (input_config == NULL) {
+ fprintf(stderr, "%s::%d Memory Alloc Error\n", __func__, __LINE__);
+ return NULL;
+ }
+ input_config->sample_rate = stream_info->config.sample_rate;
+ input_config->channels = stream_info->channels;
+ input_config->bit_width = stream_info->config.offload_info.bit_width;
+
+ if (stream_info->filetype == FILE_DTS)
+ stream_info->bytes_to_read = FRAME_SIZE;
+ else
+ stream_info->bytes_to_read = 1024;
+ input_streams_count++;
+ if (input_streams_count == 2) {
+ if (stream_info->filetype == FILE_WAV) {
+ input_config->flags = QAP_MODULE_FLAG_SYSTEM_SOUND;
+ stream_info->system_input = true;
+ has_system_input = true;
+ ALOGV("%s::%d Set Secondary System Sound Flag", __func__, __LINE__);
+ } else if (stream_info->filetype != FILE_WAV) {
+ if (stream_info->flags & AUDIO_OUTPUT_FLAG_ASSOCIATED) {
+ ALOGV("%s::%d Set Secondary Assoc Input Flag", __func__, __LINE__);
+ input_config->flags = QAP_MODULE_FLAG_SECONDARY;
+ stream_info->sec_input = true;
+ } else {
+ ALOGV("%s::%d Set Secondary Main Input Flag", __func__, __LINE__);
+ input_config->flags = QAP_MODULE_FLAG_PRIMARY;
+ stream_info->sec_input = true;
+ }
+ }
+ stream_info->bytes_to_read = 2048;
+ } else {
+ if (stream_info->filetype == FILE_WAV) {
+ ALOGV("%s::%d Set Secondary System Sound Flag", __func__, __LINE__);
+ input_config->flags = QAP_MODULE_FLAG_SYSTEM_SOUND;
+ stream_info->system_input = true;
+ } else {
+ ALOGV("%s::%d Set Primary Main Input Flag", __func__, __LINE__);
+ input_config->flags = QAP_MODULE_FLAG_PRIMARY;
+ }
+ }
+
+ if (!encode)
+ input_config->module_type = QAP_MODULE_DECODER;
+ else
+ input_config->module_type = QAP_MODULE_ENCODER;
+
+ ret = qap_wrapper_map_input_format(stream_info->config.offload_info.format, &input_config->format);
+ if (ret == -EINVAL)
+ return NULL;
+
+ ret = qap_module_init(qap_session_handle, input_config, &qap_module_handle);
+ if (qap_module_handle == NULL) {
+ fprintf(stderr, "%s Module Handle is Null\n", __func__);
+ return NULL;
+ }
+
+ stream_close = false;
+ return qap_module_handle;
+
+}
+void get_play_list(FILE *fp, stream_config (*stream_param)[], int *num_of_streams, char *kvp_str[])
+{
+ char *token = NULL;
+ char *strings[100] = {NULL};
+ char cmd_str[500] = {0};
+ char *tmp_str = NULL;
+ int i = 0;
+
+ do {
+ int j = 0, cnt = 1, status = 0;
+
+ if (fgets(cmd_str, sizeof(cmd_str), fp) != NULL)
+ tmp_str = strdup(cmd_str);
+ else
+ break;
+ fprintf(stdout, "%s %d\n", __FUNCTION__, __LINE__);
+ token = strtok(tmp_str, " ");
+ if (NULL != token) {
+ strings[cnt] = (char*)calloc(1, (strlen(token) +1));
+ memset(strings[cnt], '\0', strlen(token) +1);
+ strncpy(strings[cnt], token, strlen(token));
+ cnt++;
+ while (NULL != (token = strtok(NULL, " "))) {
+ strings[cnt] = (char*)calloc(1, (strlen(token) +1));
+ memset(strings[cnt], '\0', strlen(token) +1);
+ strncpy(strings[cnt], token, strlen(token));
+ cnt++;
+ }
+ strings[0] = calloc(1, 4);
+ memset(strings[0], '\0', 4);
+ strncpy(strings[0], "play_list", 3);
+ for (j = 0;j< cnt;j++) {
+ if (!strncmp(strings[j], "-f", 2)) {
+ (*stream_param)[i].filename = strdup(strings[j+1]);
+ } else if (!strncmp(strings[j], "-r", 2)) {
+ (*stream_param)[i].config.offload_info.sample_rate = atoi(strings[j+1]);
+ (*stream_param)[i].config.sample_rate = atoi(strings[j+1]);
+ } else if (!strncmp(strings[j], "-c", 2)) {
+ (*stream_param)[i].channels = atoi(strings[j+1]);
+ (*stream_param)[i].config.channel_mask = audio_channel_out_mask_from_count(atoi(strings[j+1]));
+ } else if (!strncmp(strings[j], "-b", 2)) {
+ (*stream_param)[i].config.offload_info.bit_width = atoi(strings[j+1]);
+ } else if (!strncmp(strings[j], "-d", 2)) {
+ (*stream_param)[i].output_device = atoll(strings[j+1]);
+ } else if (!strncmp(strings[j], "-t", 2)) {
+ (*stream_param)[i].filetype = atoi(strings[j+1]);
+ } else if (!strncmp(strings[j], "-a", 2)) {
+ (*stream_param)[i].aac_fmt_type = atoi(strings[j+1]);
+ }
+ }
+ }
+ if(NULL != (*stream_param)[i].filename) {
+ *num_of_streams = i+1;
+ play_list = true;
+ kvp_str[i] = (char *)qap_wrapper_get_cmd_string_from_arg_array(cnt, (char**)strings, &status);
+ }
+ free(tmp_str);
+ for (j=0; j < cnt; j++)
+ free(strings[j]);
+ i++;
+ }while(NULL != cmd_str);
+
+ return;
+}
+
+void hal_test_qap_usage() {
+ printf(" \n qap commands \n");
+ printf(" -qap - Enabling playback through QAP for nun tunnel decoding mode\n");
+ printf(" -bd - Enabling Broadcast Decode/Encode session through QAP\n");
+ printf(" -broadcast - Enabling playback through QAP for nun tunnel decoding mode\n");
+ printf(" -y --timestamp filename - Input timestamp file to be used to send timestamp and bytes to be read from main input file.\n");
+ printf(" -z --framesize filename - Input framesize file to be used to send bytes to be read from main input file.\n");
+ printf(" hal_play_test -qap -broadcast -f /data/5ch_dd_25fps_channeld_id.ac3 -t 9 -d 2 -v 0.01 -r 48000 -c 6 \n");
+ printf(" -> plays AC3 stream(-t = 9) on speaker device(-d = 2)\n");
+ printf(" -> 6 channels and 48000 sample rate\n\n");
+ printf(" -> using QAP with Broadcast session\n\n");
+ printf(" hal_play_test -qap -bd -f /data/200_48_16_ieq_mix_voice_40s.ec3 -t 11 -d 2 -v 0.01 -r 48000 -c 2 \n");
+ printf(" -> plays EAC3 stream(-t = 11) on speaker device(-d = 2)\n");
+ printf(" -> 2 channels and 48000 sample rate\n\n");
+ printf(" -> using QAP with Bluray session\n\n");
+}
diff --git a/qahw_api/test/trans_loopback_test.c b/qahw_api/test/trans_loopback_test.c
index a0673de..1ba2c55 100644
--- a/qahw_api/test/trans_loopback_test.c
+++ b/qahw_api/test/trans_loopback_test.c
@@ -45,6 +45,7 @@
#include <sys/socket.h>
#include <sys/types.h>
#include <utils/Log.h>
+#include <math.h>
#include <cutils/list.h>
#include "qahw_api.h"
@@ -87,6 +88,7 @@
FILE * log_file = NULL;
volatile bool stop_loopback = false;
+static float loopback_gain = 1.0;
const char *log_filename = NULL;
#define TRANSCODE_LOOPBACK_SOURCE_PORT_ID 0x4C00
@@ -138,6 +140,34 @@
stop_loopback = true;
}
+int poll_data_event_init()
+{
+ struct sockaddr_nl sock_addr;
+ int sz = (64*1024);
+ int soc;
+
+ memset(&sock_addr, 0, sizeof(sock_addr));
+ sock_addr.nl_family = AF_NETLINK;
+ sock_addr.nl_pid = getpid();
+ sock_addr.nl_groups = 0xffffffff;
+
+ soc = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);
+ if (soc < 0) {
+ return 0;
+ }
+
+ setsockopt(soc, SOL_SOCKET, SO_RCVBUFFORCE, &sz, sizeof(sz));
+
+ if (bind(soc, (struct sockaddr*) &sock_addr, sizeof(sock_addr)) < 0) {
+ close(soc);
+ return 0;
+ }
+
+ sock_event_fd = soc;
+
+ return (soc > 0);
+}
+
void init_transcode_loopback_config(transcode_loopback_config_t **p_transcode_loopback_config)
{
fprintf(log_file,"\nInitializing global transcode loopback config\n");
@@ -237,6 +267,8 @@
{
int rc=0;
tlb_hdmi_config_t hdmi_config = {0};
+ transcode_loopback_config_t *transcode_loopback_config = &g_trnscode_loopback_config;
+ transcode_loopback_config->source_port_config.source_port_state = SOURCE_PORT_INACTIVE;
switch(source_port_type)
{
case SOURCE_PORT_HDMI :
@@ -364,6 +396,23 @@
&transcode_loopback_config->sink_config,
&transcode_loopback_config->patch_handle);
fprintf(log_file,"\nCreate patch returned %d\n",rc);
+ if(!rc) {
+ struct audio_port_config sink_gain_config;
+ /* Convert loopback gain to millibels */
+ int loopback_gain_in_millibels = 2000 * log10(loopback_gain);
+ sink_gain_config.gain.index = 0;
+ sink_gain_config.gain.mode = AUDIO_GAIN_MODE_JOINT;
+ sink_gain_config.gain.channel_mask = 1;
+ sink_gain_config.gain.values[0] = loopback_gain_in_millibels;
+ sink_gain_config.id = transcode_loopback_config->sink_config.id;
+ sink_gain_config.role = transcode_loopback_config->sink_config.role;
+ sink_gain_config.type = transcode_loopback_config->sink_config.type;
+ sink_gain_config.config_mask = AUDIO_PORT_CONFIG_GAIN;
+
+ (void)qahw_set_audio_port_config(transcode_loopback_config->hal_handle,
+ &sink_gain_config);
+ }
+
return rc;
}
@@ -394,34 +443,6 @@
}
-int poll_data_event_init()
-{
- struct sockaddr_nl sock_addr;
- int sz = (64*1024);
- int soc;
-
- memset(&sock_addr, 0, sizeof(sock_addr));
- sock_addr.nl_family = AF_NETLINK;
- sock_addr.nl_pid = getpid();
- sock_addr.nl_groups = 0xffffffff;
-
- soc = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);
- if (soc < 0) {
- return 0;
- }
-
- setsockopt(soc, SOL_SOCKET, SO_RCVBUFFORCE, &sz, sizeof(sz));
-
- if (bind(soc, (struct sockaddr*) &sock_addr, sizeof(sock_addr)) < 0) {
- close(soc);
- return 0;
- }
-
- sock_event_fd = soc;
-
- return (soc > 0);
-}
-
void source_data_event_handler(transcode_loopback_config_t *transcode_loopback_config)
{
int status =0;
@@ -491,8 +512,9 @@
}
j++;
}
- fprintf(log_file,"devpath = %s, switch_name = %s \n",
- dev_path, switch_name);
+
+ if ((dev_path != NULL) && (switch_name != NULL))
+ fprintf(log_file,"devpath = %s, switch_name = %s \n",dev_path, switch_name);
if((DEV_NODE_CHECK(tlb_hdmi_in_audio_dev_path, dev_path) == 0) || (DEV_NODE_CHECK(tlb_hdmi_in_audio_sample_rate_dev_path, dev_path) == 0)
|| (DEV_NODE_CHECK(tlb_hdmi_in_audio_state_dev_path, dev_path) == 0)
@@ -509,23 +531,9 @@
pthread_exit(0);
}
-bool is_device_supported(uint32_t device_id)
-{
- switch(device_id)
- {
- case AUDIO_DEVICE_OUT_SPEAKER :
- case AUDIO_DEVICE_OUT_WIRED_HEADSET :
- case AUDIO_DEVICE_OUT_WIRED_HEADPHONE :
- return true;
- default :
- return false;
- }
-}
-
void set_device(uint32_t device_type, uint32_t device_id)
{
transcode_loopback_config_t *transcode_loopback_config = &g_trnscode_loopback_config;
- device_id = is_device_supported(device_id) ? device_id : AUDIO_DEVICE_OUT_SPEAKER;
switch( device_type )
{
case DEVICE_SINK:
@@ -540,7 +548,7 @@
int main(int argc, char *argv[]) {
int status = 0;
- uint32_t play_duration_in_seconds = 600,play_duration_elapsed_msec = 0,play_duration_in_msec = 0, sink_device = 2;
+ uint32_t play_duration_in_seconds = 600,play_duration_elapsed_msec = 0,play_duration_in_msec = 0, sink_device = 2, volume_in_millibels = 0;
source_port_type_t source_port_type = SOURCE_PORT_NONE;
log_file = stdout;
transcode_loopback_config_t *transcode_loopback_config = NULL;
@@ -550,6 +558,7 @@
/* These options set a flag. */
{"sink-device", required_argument, 0, 'd'},
{"play-duration", required_argument, 0, 'p'},
+ {"play-volume", required_argument, 0, 'v'},
{"help", no_argument, 0, 'h'},
{0, 0, 0, 0}
};
@@ -559,7 +568,7 @@
while ((opt = getopt_long(argc,
argv,
- "-d:p:h",
+ "-d:p:v:h",
long_options,
&option_index)) != -1) {
@@ -572,6 +581,9 @@
case 'p':
play_duration_in_seconds = atoi(optarg);
break;
+ case 'v':
+ loopback_gain = atof(optarg);
+ break;
case 'h':
default :
usage();
@@ -581,9 +593,9 @@
}
fprintf(log_file,"\nTranscode loopback test begin\n");
- if (play_duration_in_seconds < 0 | play_duration_in_seconds > 3600) {
+ if (play_duration_in_seconds < 0 | play_duration_in_seconds > 360000) {
fprintf(log_file,
- "\nPlayback duration %d invalid or unsupported(range : 1 to 3600, defaulting to 600 seconds )\n",
+ "\nPlayback duration %d invalid or unsupported(range : 1 to 360000, defaulting to 600 seconds )\n",
play_duration_in_seconds);
play_duration_in_seconds = 600;
}
@@ -651,8 +663,8 @@
void usage()
{
- fprintf(log_file,"\nUsage : trans_loopback_test -p <duration_in_seconds> -d <sink_device_id>\n");
- fprintf(log_file,"\nExample to play for 1 minute on speaker device: trans_loopback_test -p 60 -d 2\n");
+ fprintf(log_file,"\nUsage : trans_loopback_test -p <duration_in_seconds> -d <sink_device_id> -v <loopback_volume(range 0 to 4.0)>\n");
+ fprintf(log_file,"\nExample to play for 1 minute on speaker device with volume unity: trans_loopback_test -p 60 -d 2 -v 1.0\n");
fprintf(log_file,"\nExample to play for 5 minutes on headphone device: trans_loopback_test -p 300 -d 8\n");
fprintf(log_file,"\nHelp : trans_loopback_test -h\n");
}