Merge "hal: add support for FFV get params"
diff --git a/Android.mk b/Android.mk
index 13c5b4a..060bee6 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,3 +1,4 @@
+ifneq ($(AUDIO_USE_STUB_HAL), true)
ifneq ($(filter mpq8092 msm8960 msm8226 msm8x26 msm8610 msm8974 msm8x74 apq8084 msm8916 msm8994 msm8992 msm8909 msm8996 msm8952 msm8937 thorium msm8953 msmgold msm8998 sdm660 sdm845 sdm710 apq8098_latv qcs605 msmnile $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
MY_LOCAL_PATH := $(call my-dir)
@@ -23,3 +24,4 @@
endif
endif
+endif
diff --git a/configs/kona/audio_effects.conf b/configs/kona/audio_effects.conf
new file mode 100644
index 0000000..8b9189a
--- /dev/null
+++ b/configs/kona/audio_effects.conf
@@ -0,0 +1,367 @@
+# 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
+ }
+ dynamics_processing {
+ path /vendor/lib/soundfx/libdynproc.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
+ }
+ dynamics_processing {
+ library dynamics_processing
+ uuid e0e6539b-1781-7261-676f-6d7573696340
+ }
+ 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/kona/audio_effects.xml b/configs/kona/audio_effects.xml
new file mode 100644
index 0000000..7c0cd22
--- /dev/null
+++ b/configs/kona/audio_effects.xml
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--- Copyright (c) 2018, The Linux Foundation. All rights reserved. -->
+<!--- -->
+<!--- Redistribution and use in source and binary forms, with or without -->
+<!--- modification, are permitted provided that the following conditions are -->
+<!--- met: -->
+<!--- * Redistributions of source code must retain the above copyright -->
+<!--- notice, this list of conditions and the following disclaimer. -->
+<!--- * Redistributions in binary form must reproduce the above -->
+<!--- copyright notice, this list of conditions and the following -->
+<!--- disclaimer in the documentation and/or other materials provided -->
+<!--- with the distribution. -->
+<!--- * Neither the name of The Linux Foundation nor the names of its -->
+<!--- contributors may be used to endorse or promote products derived -->
+<!--- from this software without specific prior written permission. -->
+<!--- -->
+<!--- THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED -->
+<!--- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -->
+<!--- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT -->
+<!--- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS -->
+<!--- BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -->
+<!--- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -->
+<!--- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -->
+<!--- BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -->
+<!--- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -->
+<!--- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -->
+<!--- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -->
+
+<audio_effects_conf version="2.0" xmlns="http://schemas.android.com/audio/audio_effects_conf/v2_0">
+ <libraries>
+ <library name="bundle" path="libbundlewrapper.so"/>
+ <library name="reverb" path="libreverbwrapper.so"/>
+ <library name="qcbassboost" path="libqcbassboost.so"/>
+ <library name="qcvirt" path="libqcvirt.so"/>
+ <library name="qcreverb" path="libqcreverb.so"/>
+ <library name="visualizer_sw" path="libvisualizer.so"/>
+ <library name="visualizer_hw" path="libqcomvisualizer.so"/>
+ <library name="downmix" path="libdownmix.so"/>
+ <library name="loudness_enhancer" path="libldnhncr.so"/>
+ <library name="dynamics_processing" path="libdynproc.so"/>
+ <library name="proxy" path="libeffectproxy.so"/>
+ <library name="offload_bundle" path="libqcompostprocbundle.so"/>
+ <library name="audio_pre_processing" path="libqcomvoiceprocessing.so"/>
+ <library name="volume_listener" path="libvolumelistener.so"/>
+ <library name="audiosphere" path="libasphere.so"/>
+ <library name="shoebox" path="libshoebox.so"/>
+ </libraries>
+ <effects>
+ <effectProxy name="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"/>
+ </effectProxy>
+ <effectProxy name="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"/>
+ </effectProxy>
+ <effectProxy name="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"/>
+ </effectProxy>
+ <effect name="volume" library="bundle" uuid="119341a0-8469-11df-81f9-0002a5d5c51b"/>
+ <effectProxy name="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"/>
+ </effectProxy>
+ <effectProxy name="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"/>
+ </effectProxy>
+ <effectProxy name="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"/>
+ </effectProxy>
+ <effectProxy name="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"/>
+ </effectProxy>
+ <effectProxy name="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"/>
+ </effectProxy>
+ <effect name="downmix" library="downmix" uuid="93f04452-e4fe-41cc-91f9-e475b6d1d69f"/>
+ <effect name="hw_acc" library="offload_bundle" uuid="7d1580bd-297f-4683-9239-e475b6d1d69f"/>
+ <effect name="loudness_enhancer" library="loudness_enhancer" uuid="fa415329-2034-4bea-b5dc-5b381c8d1e2c"/>
+ <effect name="dynamics_processing" library="dynamics_processing" uuid="e0e6539b-1781-7261-676f-6d7573696340"/>
+ <effect name="aec" library="audio_pre_processing" uuid="0f8d0d2a-59e5-45fe-b6e4-248c8a799109"/>
+ <effect name="ns" library="audio_pre_processing" uuid="1d97bb0b-9e2f-4403-9ae3-58c2554306f8"/>
+ <effect name="music_helper" library="volume_listener" uuid="08b8b058-0590-11e5-ac71-0025b32654a0"/>
+ <effect name="ring_helper" library="volume_listener" uuid="0956df94-0590-11e5-bdbe-0025b32654a0"/>
+ <effect name="alarm_helper" library="volume_listener" uuid="09f303e2-0590-11e5-8fdb-0025b32654a0"/>
+ <effect name="voice_helper" library="volume_listener" uuid="0ace5c08-0590-11e5-ae9e-0025b32654a0"/>
+ <effect name="notification_helper" library="volume_listener" uuid="0b776dde-0590-11e5-81ba-0025b32654a0"/>
+ <effect name="audiosphere" library="audiosphere" uuid="184e62ab-2d19-4364-9d1b-c0a40733866c"/>
+ <effect name="shoebox" library="shoebox" uuid="1eab784c-1a36-4b2a-b7fc-e34c44cab89e"/>
+ </effects>
+ <postprocess>
+ <stream type="music">
+ <apply effect="music_helper"/>
+ </stream>
+ <stream type="ring">
+ <apply effect="ring_helper"/>
+ </stream>
+ <stream type="alarm">
+ <apply effect="alarm_helper"/>
+ </stream>
+ <stream type="voice_call">
+ <apply effect="voice_helper"/>
+ </stream>
+ <stream type="notification">
+ <apply effect="notification_helper"/>
+ </stream>
+ </postprocess>
+ <preprocess>
+ <stream type="voice_communication">
+ <apply effect="aec"/>
+ <apply effect="ns"/>
+ </stream>
+ </preprocess>
+</audio_effects_conf>
diff --git a/configs/kona/audio_io_policy.conf b/configs/kona/audio_io_policy.conf
new file mode 100644
index 0000000..bac3ec1
--- /dev/null
+++ b/configs/kona/audio_io_policy.conf
@@ -0,0 +1,99 @@
+# 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
+ }
+ voip_rx {
+ flags AUDIO_OUTPUT_FLAG_VOIP_RX|AUDIO_OUTPUT_FLAG_DIRECT
+ formats AUDIO_FORMAT_PCM_16_BIT
+ sampling_rates 8000|16000|32000|48000
+ bit_width 16
+ app_type 69946
+ }
+ deep_buffer {
+ flags AUDIO_OUTPUT_FLAG_DEEP_BUFFER
+ formats AUDIO_FORMAT_PCM_16_BIT
+ 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
+ }
+}
+
+inputs {
+ record_24bit {
+ formats AUDIO_FORMAT_PCM_24_BIT_PACKED|AUDIO_FORMAT_PCM_24_BIT
+ sampling_rates 44100|48000|88200|96000|176400|192000
+ bit_width 24
+ app_type 69938
+ }
+ record_32bit {
+ formats AUDIO_FORMAT_PCM_32_BIT|AUDIO_FORMAT_PCM_FLOAT
+ sampling_rates 44100|48000|88200|96000|176400|192000
+ bit_width 32
+ app_type 69938
+ }
+}
diff --git a/configs/kona/audio_platform_info.xml b/configs/kona/audio_platform_info.xml
new file mode 100644
index 0000000..9dd4cfc
--- /dev/null
+++ b/configs/kona/audio_platform_info.xml
@@ -0,0 +1,616 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!-- Copyright (c) 2014, 2016-2018, 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_REVERSE" 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_IN_UNPROCESSED_USB_HEADSET_MIC" acdb_id="133"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_MIC" acdb_id="143"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_STEREO_MIC" acdb_id="144"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_THREE_MIC" acdb_id="145"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_QUAD_MIC" acdb_id="146"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC" acdb_id="147"/>
+ <device name="SND_DEVICE_IN_USB_HEADSET_HEX_MIC" acdb_id="162"/>
+ <device name="SND_DEVICE_IN_USB_HEADSET_HEX_MIC_AEC" acdb_id="162"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_USB_HEADSET_HEX_MIC" acdb_id="162"/>
+ <device name="SND_DEVICE_IN_VOCE_RECOG_USB_HEADSET_HEX_MIC" acdb_id="162"/>
+ </acdb_ids>
+
+ <module_ids>
+ <aec>
+ <device name="SND_DEVICE_IN_SPEAKER_TMIC_AEC_NS" module_id="0x10F35" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE" module_id="0x10F34" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS" module_id="0x10F33" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS" module_id="0x10F33" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x01"/>
+ </aec>
+ <ns>
+ <device name="SND_DEVICE_IN_SPEAKER_TMIC_AEC_NS" module_id="0x10F35" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE" module_id="0x10F34" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS" module_id="0x10F33" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS" module_id="0x10F33" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS" module_id="0x10F31" instance_id="0x0" param_id="0x10EAF" param_value="0x02"/>
+ </ns>
+ </module_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="9"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD" type="out" id="8"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD2" type="out" id="11"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD3" type="out" id="12"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD4" type="out" id="24"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD5" type="out" id="25"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD6" type="out" id="26"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD7" type="out" id="27"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD8" type="out" id="28"/>
+ <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="15"/>
+ <usecase name="USECASE_VOICEMMODE2_CALL" type="out" id="15"/>
+ <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="30"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_FM" type="in" id="29"/>
+ <usecase name="USECASE_AUDIO_SPKR_CALIB_RX" type="out" id="30"/>
+ <usecase name="USECASE_AUDIO_SPKR_CALIB_TX" type="in" id="35"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_AFE_PROXY" type="out" id="5"/>
+ <usecase name="USECASE_AUDIO_RECORD_AFE_PROXY" type="in" id="6"/>
+ <usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY" type="in" id="13" />
+ <usecase name="USECASE_AUDIO_PLAYBACK_ULL" type="out" id="13" />
+ <usecase name="USECASE_AUDIO_PLAYBACK_SILENCE" type="out" id="23" />
+ <usecase name="USECASE_AUDIO_PLAYBACK_VOIP" type="out" id="12" />
+ <usecase name="USECASE_AUDIO_RECORD_VOIP" type="in" id="12" />
+ <usecase name="USECASE_AUDIO_PLAYBACK_MMAP" type="out" id="29" />
+ <usecase name="USECASE_AUDIO_RECORD_MMAP" type="in" id="29" />
+ <usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="in" id="40" />
+ <usecase name="USECASE_INCALL_MUSIC_UPLINK" type="out" id="23" />
+ </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="left"/>
+ <!-- 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="3"/>
+ <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"/>
+ </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="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_HEADPHONES_44_1" backend="headphones-44.1" interface="RX_CDC_DMA_RX_0"/>
+ <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="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_ANC_HEADSET" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES" backend="speaker-and-headphones" interface="WSA_CDC_DMA_RX_0-and-RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_LINE" backend="speaker-and-headphones" interface="WSA_CDC_DMA_RX_0-and-RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_ANC_HEADSET" backend="speaker-and-headphones" interface="WSA_CDC_DMA_RX_0-and-RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_ANC_HEADSET" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_LINE" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_TTY_FULL_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_HANDSET" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_EXTERNAL_1" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_EXTERNAL_2" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_REVERSE" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_VBAT" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES_EXTERNAL_1" interface="WSA_CDC_DMA_RX_0-and-RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES_EXTERNAL_2" interface="WSA_CDC_DMA_RX_0-and-RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_HANDSET" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_IN_HANDSET_GENERIC_QMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_VBAT" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_HDMI" interface="WSA_CDC_DMA_RX_0-and-HDMI"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_DISPLAY_PORT" interface="WSA_CDC_DMA_RX_0-and-DISPLAY_PORT"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP" interface="WSA_CDC_DMA_RX_0-and-SLIMBUS_7_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_ANC_FB_HEADSET" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_ANC_FB_HEADSET" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_ANC_HANDSET" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_PROTECTED" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_WSA" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_WSA" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_WSA" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_EXTERNAL" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HEADSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HEADSET_MIC_FLUENCE" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_SPEAKER_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_HEADSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <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="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_DMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_SPEAKER_DMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_SPEAKER_QMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_MIC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_DMIC_STEREO" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_AANC_HANDSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_QUAD_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_STEREO_DMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_STEREO_DMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK" interface="WSA_CDC_DMA_TX_0"/>
+ <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_1" interface="WSA_CDC_DMA_TX_0"/>
+ <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_2" interface="WSA_CDC_DMA_TX_0"/>
+ <device name="SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BROADSIDE" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_BROADSIDE" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_BROADSIDE" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_NS_BROADSIDE" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_FLUENCE_DMIC_AANC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_QMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_QMIC_AEC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_QMIC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_THREE_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_TMIC_FLUENCE_PRO" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_TMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_TMIC_AEC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_TMIC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_TMIC_AEC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_TMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_STEREO_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_THREE_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_QUAD_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_AND_VOICE_HEADPHONES" backend="speaker-and-headphones" interface="WSA_CDC_DMA_RX_0-and-RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_AND_VOICE_ANC_HEADSET" backend="speaker-and-headphones" interface="WSA_CDC_DMA_RX_0-and-RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_BT_SCO" backend="speaker-and-bt-sco" interface="WSA_CDC_DMA_RX_0-and-SLIMBUS_7_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB" backend="speaker-and-bt-sco-wb" interface="WSA_CDC_DMA_RX_0-and-SLIMBUS_7_RX"/>
+ </backend_names>
+ <!-- below values are for ref purpose to OEM, doesn't contain actual hardware info on MTP -->
+ <microphone_characteristics>
+ <microphone valid_mask="31" device_id="builtin_mic_1" type="AUDIO_DEVICE_IN_BUILTIN_MIC" address="bottom" location="AUDIO_MICROPHONE_LOCATION_MAINBODY"
+ group="0" index_in_the_group="0" directionality="AUDIO_MICROPHONE_DIRECTIONALITY_OMNI" num_frequency_responses="93"
+ frequencies="100.00 106.00 112.00 118.00 125.00 132.00 140.00 150.00 160.00 170.00 180.00 190.00 200.00 212.00 224.00 236.00 250.00 265.00 280.00 300.00 315.00 335.00 355.00 375.00 400.00 425.00 450.00 475.00 500.00 530.00 560.00 600.00 630.00 670.00 710.00 750.00 800.00 850.00 900.00 950.00 1000.00 1060.00 1120.00 1180.00 1250.00 1320.00 1400.00 1500.00 1600.00 1700.00 1800.00 1900.00 2000.00 2120.00 2240.00 2360.00 2500.00 2650.00 2800.00 3000.00 3150.00 3350.00 3550.00 3750.00 4000.00 4250.00 4500.00 4750.00 5000.00 5300.00 5600.00 6000.00 6300.00 6700.00 7100.00 7500.00 8000.00 8500.00 9000.00 9500.00 10000.00 10600.00 11200.00 11800.00 12500.00 13200.00 14000.00 15000.00 16000.00 17000.00 18000.00 19000.00 20000.00"
+ responses="-0.78 -0.71 -0.64 -0.60 -0.55 -0.50 -0.47 -0.42 -0.39 -0.36 -0.34 -0.33 -0.32 -0.29 -0.28 -0.28 -0.27 -0.25 -0.25 -0.24 -0.23 -0.23 -0.22 -0.22 -0.19 -0.17 -0.15 -0.15 -0.14 -0.14 -0.12 -0.11 -0.10 -0.10 -0.08 -0.07 -0.07 -0.04 -0.03 -0.01 0.00 0.04 0.06 0.07 0.08 0.13 0.09 0.14 0.19 0.23 0.28 0.29 0.31 0.37 0.88 0.86 0.77 0.78 0.84 0.86 1.05 1.12 1.18 1.25 1.43 1.66 1.83 2.02 2.23 2.59 2.84 3.35 4.01 6.82 6.62 6.42 7.30 8.23 7.54 12.68 13.76 18.69 19.68 20.90 23.70 25.10 21.65 16.18 18.84 25.44 23.48 23.22 24.89"
+ sensitivity="-37.0" max_spl="132.5" min_spl="28.5" orientation="0.0 0.0 1.0" geometric_location="0.0269 0.0058 0.0079" />
+ <microphone valid_mask="31" device_id="builtin_mic_2" type="AUDIO_DEVICE_IN_BACK_MIC" address="back" location="AUDIO_MICROPHONE_LOCATION_MAINBODY"
+ group="0" index_in_the_group="1" directionality="AUDIO_MICROPHONE_DIRECTIONALITY_OMNI" num_frequency_responses="92"
+ frequencies="106.00 112.00 118.00 125.00 132.00 140.00 150.00 160.00 170.00 180.00 190.00 200.00 212.00 224.00 236.00 250.00 265.00 280.00 300.00 315.00 335.00 355.00 375.00 400.00 425.00 450.00 475.00 500.00 530.00 560.00 600.00 630.00 670.00 710.00 750.00 800.00 850.00 900.00 950.00 1000.00 1060.00 1120.00 1180.00 1250.00 1320.00 1400.00 1500.00 1600.00 1700.00 1800.00 1900.00 2000.00 2120.00 2240.00 2360.00 2500.00 2650.00 2800.00 3000.00 3150.00 3350.00 3550.00 3750.00 4000.00 4250.00 4500.00 4750.00 5000.00 5300.00 5600.00 6000.00 6300.00 6700.00 7100.00 7500.00 8000.00 8500.00 9000.00 9500.00 10000.00 10600.00 11200.00 11800.00 12500.00 13200.00 14000.00 15000.00 16000.00 17000.00 18000.00 19000.00 20000.00"
+ responses="-0.75 -0.74 -0.69 -0.65 -0.62 -0.61 -0.56 -0.53 -0.50 -0.47 -0.43 -0.40 -0.37 -0.36 -0.33 -0.30 -0.28 -0.25 -0.24 -0.24 -0.24 -0.25 -0.24 -0.12 -0.10 -0.08 -0.09 -0.07 -0.07 -0.06 -0.06 -0.06 -0.05 -0.04 -0.05 -0.04 -0.01 0.02 0.02 0.00 0.02 0.03 0.07 0.10 0.10 0.13 0.01 0.01 0.10 0.11 0.19 0.24 0.38 0.46 0.26 0.27 0.43 0.76 0.75 1.09 1.09 0.94 1.06 1.21 1.47 1.45 1.36 2.07 2.85 2.90 3.85 4.65 5.84 5.46 6.15 7.50 8.30 10.62 12.70 16.65 20.95 25.41 26.32 20.20 16.60 11.24 7.85 7.62 20.19 7.32 2.87 5.18"
+ sensitivity="-37.0" max_spl="132.5" min_spl="28.5" orientation="0.0 1.0 0.0" geometric_location="0.0546 0.1456 0.00415" />
+ <microphone valid_mask="31" device_id="builtin_mic_3" type="AUDIO_DEVICE_IN_BUILTIN_MIC" address="" location="AUDIO_MICROPHONE_LOCATION_MAINBODY"
+ group="0" index_in_the_group="2" directionality="AUDIO_MICROPHONE_DIRECTIONALITY_OMNI" num_frequency_responses="92"
+ frequencies="100.00 106.00 112.00 118.00 125.00 132.00 140.00 150.00 160.00 170.00 180.00 190.00 200.00 212.00 224.00 236.00 250.00 265.00 280.00 300.00 315.00 335.00 355.00 375.00 400.00 425.00 450.00 475.00 500.00 530.00 560.00 600.00 630.00 670.00 710.00 750.00 800.00 850.00 900.00 950.00 1000.00 1060.00 1120.00 1180.00 1250.00 1320.00 1400.00 1500.00 1600.00 1700.00 1800.00 1900.00 2000.00 2120.00 2240.00 2360.00 2500.00 2650.00 2800.00 3000.00 3150.00 3350.00 3550.00 3750.00 4000.00 4250.00 4500.00 4750.00 5000.00 5300.00 5600.00 6000.00 6300.00 6700.00 7100.00 7500.00 8000.00 8500.00 9000.00 9500.00 10000.00 10600.00 11200.00 11800.00 12500.00 13200.00 14000.00 15000.00 16000.00 17000.00 18000.00 19000.00"
+ responses="-9.24 -9.31 -9.39 -9.45 -9.46 -9.47 -9.50 -9.52 -9.51 -9.52 -9.51 -9.50 -9.49 -9.47 -9.48 -9.49 -9.48 -9.50 -9.51 -9.53 -9.55 -9.59 -9.63 -9.67 -9.58 -9.57 -9.65 -9.68 -9.71 -9.75 -9.79 -9.84 -9.87 -9.87 -9.90 -9.90 -9.91 -9.97 -10.01 -10.05 -9.85 -9.93 -9.94 -9.98 -10.04 -10.12 -10.28 -10.25 -10.01 -9.86 -9.81 -9.82 -9.61 -9.46 -8.27 -8.42 -8.98 -8.99 -8.82 -9.21 -8.92 -8.97 -9.30 -9.44 -9.52 -9.28 -9.09 -8.81 -7.02 -5.72 -5.30 -7.26 -8.39 -12.28 -8.23 -6.99 -5.52 -4.87 -3.82 -6.09 0.00 -2.15 -0.26 1.48 5.22 10.92 6.41 9.55 12.96 3.35 22.00 19.75"
+ sensitivity="-37.0" max_spl="132.5" min_spl="28.5" orientation="0.0 0.0 1.0" geometric_location="0.0274 0.14065 0.0079" />
+ <microphone valid_mask="31" device_id="builtin_mic_4" type="AUDIO_DEVICE_IN_BACK_MIC" address="" location="AUDIO_MICROPHONE_LOCATION_MAINBODY"
+ group="0" index_in_the_group="3" directionality="AUDIO_MICROPHONE_DIRECTIONALITY_OMNI" num_frequency_responses="92"
+ frequencies="106.00 112.00 118.00 125.00 132.00 140.00 150.00 160.00 170.00 180.00 190.00 200.00 212.00 224.00 236.00 250.00 265.00 280.00 300.00 315.00 335.00 355.00 375.00 400.00 425.00 450.00 475.00 500.00 530.00 560.00 600.00 630.00 670.00 710.00 750.00 800.00 850.00 900.00 950.00 1000.00 1060.00 1120.00 1180.00 1250.00 1320.00 1400.00 1500.00 1600.00 1700.00 1800.00 1900.00 2000.00 2120.00 2240.00 2360.00 2500.00 2650.00 2800.00 3000.00 3150.00 3350.00 3550.00 3750.00 4000.00 4250.00 4500.00 4750.00 5000.00 5300.00 5600.00 6000.00 6300.00 6700.00 7100.00 7500.00 8000.00 8500.00 9000.00 9500.00 10000.00 10600.00 11200.00 11800.00 12500.00 13200.00 14000.00 15000.00 16000.00 17000.00 18000.00 19000.00 20000.00"
+ responses="-0.75 -0.74 -0.69 -0.65 -0.62 -0.61 -0.56 -0.53 -0.50 -0.47 -0.43 -0.40 -0.37 -0.36 -0.33 -0.30 -0.28 -0.25 -0.24 -0.24 -0.24 -0.25 -0.24 -0.12 -0.10 -0.08 -0.09 -0.07 -0.07 -0.06 -0.06 -0.06 -0.05 -0.04 -0.05 -0.04 -0.01 0.02 0.02 0.00 0.02 0.03 0.07 0.10 0.10 0.13 0.01 0.01 0.10 0.11 0.19 0.24 0.38 0.46 0.26 0.27 0.43 0.76 0.75 1.09 1.09 0.94 1.06 1.21 1.47 1.45 1.36 2.07 2.85 2.90 3.85 4.65 5.84 5.46 6.15 7.50 8.30 10.62 12.70 16.65 20.95 25.41 26.32 20.20 16.60 11.24 7.85 7.62 20.19 7.32 2.87 5.18"
+ sensitivity="-37.0" max_spl="132.5" min_spl="28.5" orientation="0.0 1.0 0.0" geometric_location="0.0546 0.1456 0.00415" />
+ </microphone_characteristics>
+ <snd_devices>
+ <input_snd_device>
+ <input_snd_device_mic_mapping>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_MIC_AEC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_MIC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_MIC_AEC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_DMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_DMIC_AEC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_DMIC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_MIC_AEC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_MIC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC_AEC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_SPEAKER_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_CAMCORDER_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_DMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_SPEAKER_DMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_SPEAKER_TMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_SPEAKER_QMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_4"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_REC_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_REC_MIC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_REC_DMIC_STEREO">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_AANC_HANDSET_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_QUAD_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_4"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_STEREO_DMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_STEREO_DMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BROADSIDE">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC_BROADSIDE">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC_AEC_BROADSIDE">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC_NS_BROADSIDE">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_FLUENCE_DMIC_AANC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_4"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_QMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_4"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_QMIC_AEC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_4"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_QMIC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_4"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_4"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_THREE_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_TMIC_FLUENCE_PRO">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_TMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_TMIC_AEC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_TMIC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_TMIC_AEC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_REC_TMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_UNPROCESSED_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_UNPROCESSED_STEREO_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_UNPROCESSED_THREE_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_UNPROCESSED_QUAD_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED"/>
+ <mic_info mic_device_id="builtin_mic_4"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_GENERIC_QMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_4"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ </input_snd_device_mic_mapping>
+ </input_snd_device>
+ </snd_devices>
+</audio_platform_info>
+
diff --git a/configs/kona/audio_platform_info_intcodec.xml b/configs/kona/audio_platform_info_intcodec.xml
new file mode 100644
index 0000000..1bb00ed
--- /dev/null
+++ b/configs/kona/audio_platform_info_intcodec.xml
@@ -0,0 +1,381 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!-- Copyright (c) 2014, 2016-2018, 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="TX_CDC_DMA_TX_3" codec_type="internal"/>
+ <device name="AUDIO_DEVICE_IN_BACK_MIC" interface="TX_CDC_DMA_TX_3" codec_type="internal"/>
+ </interface_names>
+ <pcm_ids>
+ <usecase name="USECASE_AUDIO_PLAYBACK_LOW_LATENCY" type="out" id="9"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD" type="out" id="8"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD2" type="out" id="11"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD3" type="out" id="12"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD4" type="out" id="24"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD5" type="out" id="25"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD6" type="out" id="26"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD7" type="out" id="27"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD8" type="out" id="28"/>
+ <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="15"/>
+ <usecase name="USECASE_VOICEMMODE2_CALL" type="out" id="15"/>
+ <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="30"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_FM" type="in" id="29"/>
+ <usecase name="USECASE_AUDIO_SPKR_CALIB_RX" type="out" id="30"/>
+ <usecase name="USECASE_AUDIO_SPKR_CALIB_TX" type="in" id="35"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_AFE_PROXY" type="out" id="5"/>
+ <usecase name="USECASE_AUDIO_RECORD_AFE_PROXY" type="in" id="6"/>
+ <usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY" type="in" id="13" />
+ <usecase name="USECASE_AUDIO_PLAYBACK_ULL" type="out" id="13" />
+ <usecase name="USECASE_AUDIO_PLAYBACK_SILENCE" type="out" id="23" />
+ <usecase name="USECASE_AUDIO_PLAYBACK_VOIP" type="out" id="12" />
+ <usecase name="USECASE_AUDIO_RECORD_VOIP" type="in" id="12" />
+ <usecase name="USECASE_AUDIO_HFP_SCO" type="in" id="12" />
+ <usecase name="USECASE_AUDIO_HFP_SCO_WB" type="in" id="12" />
+ <usecase name="USECASE_AUDIO_PLAYBACK_MMAP" type="out" id="29" />
+ <usecase name="USECASE_AUDIO_RECORD_MMAP" type="in" id="29" />
+ <usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="in" id="40" />
+ <usecase name="USECASE_INCALL_MUSIC_UPLINK" type="out" id="23" />
+ </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="left"/>
+ <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_REVERSE" 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"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_MIC" acdb_id="143"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_STEREO_MIC" acdb_id="144"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_THREE_MIC" acdb_id="145"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_QUAD_MIC" acdb_id="146"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC" acdb_id="147"/>
+ <device name="SND_DEVICE_IN_HANDSET_GENERIC_QMIC" acdb_id="157"/>
+ </acdb_ids>
+ <backend_names>
+ <device name="SND_DEVICE_OUT_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_HEADPHONES_44_1" backend="headphones-44.1" interface="RX_CDC_DMA_RX_0"/>
+ <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="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_ANC_HEADSET" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES" backend="speaker-and-headphones" interface="WSA_CDC_DMA_RX_0-and-RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_LINE" backend="speaker-and-headphones" interface="WSA_CDC_DMA_RX_0-and-RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_ANC_HEADSET" backend="speaker-and-headphones" interface="WSA_CDC_DMA_RX_0-and-RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_ANC_HEADSET" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_LINE" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_TTY_FULL_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_HANDSET" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_EXTERNAL_1" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_EXTERNAL_2" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_REVERSE" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_VBAT" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES_EXTERNAL_1" interface="WSA_CDC_DMA_RX_0-and-RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES_EXTERNAL_2" interface="WSA_CDC_DMA_RX_0-and-RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_HANDSET" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_IN_HANDSET_GENERIC_QMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_VBAT" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_HDMI" interface="WSA_CDC_DMA_RX_0-and-HDMI"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_DISPLAY_PORT" interface="WSA_CDC_DMA_RX_0-and-DISPLAY_PORT"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP" interface="WSA_CDC_DMA_RX_0-and-SLIMBUS_7_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_ANC_FB_HEADSET" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_ANC_FB_HEADSET" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_ANC_HANDSET" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_PROTECTED" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_WSA" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_WSA" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_WSA" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_EXTERNAL" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HEADSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HEADSET_MIC_FLUENCE" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_SPEAKER_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_HEADSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <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="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_DMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_SPEAKER_DMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_SPEAKER_QMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_MIC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_DMIC_STEREO" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_AANC_HANDSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_QUAD_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_STEREO_DMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_STEREO_DMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK" interface="WSA_CDC_DMA_TX_0"/>
+ <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_1" interface="WSA_CDC_DMA_TX_0"/>
+ <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_2" interface="WSA_CDC_DMA_TX_0"/>
+ <device name="SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BROADSIDE" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_BROADSIDE" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_BROADSIDE" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_NS_BROADSIDE" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_FLUENCE_DMIC_AANC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_QMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_QMIC_AEC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_QMIC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_THREE_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_TMIC_FLUENCE_PRO" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_TMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_TMIC_AEC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_TMIC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_TMIC_AEC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_TMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_STEREO_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_THREE_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_QUAD_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_AND_VOICE_HEADPHONES" backend="speaker-and-headphones" interface="WSA_CDC_DMA_RX_0-and-RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_AND_VOICE_ANC_HEADSET" backend="speaker-and-headphones" interface="WSA_CDC_DMA_RX_0-and-RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_BT_SCO" backend="speaker-and-bt-sco" interface="WSA_CDC_DMA_RX_0-and-SLIMBUS_7_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB" backend="speaker-and-bt-sco-wb" interface="WSA_CDC_DMA_RX_0-and-SLIMBUS_7_RX"/>
+ </backend_names>
+ <!-- below values are for ref purpose to OEM, doesn't contain actual hardware info on MTP -->
+ <microphone_characteristics>
+ <microphone valid_mask="31" device_id="builtin_mic_1" type="AUDIO_DEVICE_IN_BUILTIN_MIC" address="bottom" location="AUDIO_MICROPHONE_LOCATION_MAINBODY"
+ group="0" index_in_the_group="0" directionality="AUDIO_MICROPHONE_DIRECTIONALITY_OMNI" num_frequency_responses="93"
+ frequencies="100.00 106.00 112.00 118.00 125.00 132.00 140.00 150.00 160.00 170.00 180.00 190.00 200.00 212.00 224.00 236.00 250.00 265.00 280.00 300.00 315.00 335.00 355.00 375.00 400.00 425.00 450.00 475.00 500.00 530.00 560.00 600.00 630.00 670.00 710.00 750.00 800.00 850.00 900.00 950.00 1000.00 1060.00 1120.00 1180.00 1250.00 1320.00 1400.00 1500.00 1600.00 1700.00 1800.00 1900.00 2000.00 2120.00 2240.00 2360.00 2500.00 2650.00 2800.00 3000.00 3150.00 3350.00 3550.00 3750.00 4000.00 4250.00 4500.00 4750.00 5000.00 5300.00 5600.00 6000.00 6300.00 6700.00 7100.00 7500.00 8000.00 8500.00 9000.00 9500.00 10000.00 10600.00 11200.00 11800.00 12500.00 13200.00 14000.00 15000.00 16000.00 17000.00 18000.00 19000.00 20000.00"
+ responses="-0.78 -0.71 -0.64 -0.60 -0.55 -0.50 -0.47 -0.42 -0.39 -0.36 -0.34 -0.33 -0.32 -0.29 -0.28 -0.28 -0.27 -0.25 -0.25 -0.24 -0.23 -0.23 -0.22 -0.22 -0.19 -0.17 -0.15 -0.15 -0.14 -0.14 -0.12 -0.11 -0.10 -0.10 -0.08 -0.07 -0.07 -0.04 -0.03 -0.01 0.00 0.04 0.06 0.07 0.08 0.13 0.09 0.14 0.19 0.23 0.28 0.29 0.31 0.37 0.88 0.86 0.77 0.78 0.84 0.86 1.05 1.12 1.18 1.25 1.43 1.66 1.83 2.02 2.23 2.59 2.84 3.35 4.01 6.82 6.62 6.42 7.30 8.23 7.54 12.68 13.76 18.69 19.68 20.90 23.70 25.10 21.65 16.18 18.84 25.44 23.48 23.22 24.89"
+ sensitivity="-37.0" max_spl="132.5" min_spl="28.5" orientation="0.0 0.0 1.0" geometric_location="0.0269 0.0058 0.0079" />
+ <microphone valid_mask="31" device_id="builtin_mic_2" type="AUDIO_DEVICE_IN_BACK_MIC" address="back" location="AUDIO_MICROPHONE_LOCATION_MAINBODY"
+ group="0" index_in_the_group="1" directionality="AUDIO_MICROPHONE_DIRECTIONALITY_OMNI" num_frequency_responses="92"
+ frequencies="106.00 112.00 118.00 125.00 132.00 140.00 150.00 160.00 170.00 180.00 190.00 200.00 212.00 224.00 236.00 250.00 265.00 280.00 300.00 315.00 335.00 355.00 375.00 400.00 425.00 450.00 475.00 500.00 530.00 560.00 600.00 630.00 670.00 710.00 750.00 800.00 850.00 900.00 950.00 1000.00 1060.00 1120.00 1180.00 1250.00 1320.00 1400.00 1500.00 1600.00 1700.00 1800.00 1900.00 2000.00 2120.00 2240.00 2360.00 2500.00 2650.00 2800.00 3000.00 3150.00 3350.00 3550.00 3750.00 4000.00 4250.00 4500.00 4750.00 5000.00 5300.00 5600.00 6000.00 6300.00 6700.00 7100.00 7500.00 8000.00 8500.00 9000.00 9500.00 10000.00 10600.00 11200.00 11800.00 12500.00 13200.00 14000.00 15000.00 16000.00 17000.00 18000.00 19000.00 20000.00"
+ responses="-0.75 -0.74 -0.69 -0.65 -0.62 -0.61 -0.56 -0.53 -0.50 -0.47 -0.43 -0.40 -0.37 -0.36 -0.33 -0.30 -0.28 -0.25 -0.24 -0.24 -0.24 -0.25 -0.24 -0.12 -0.10 -0.08 -0.09 -0.07 -0.07 -0.06 -0.06 -0.06 -0.05 -0.04 -0.05 -0.04 -0.01 0.02 0.02 0.00 0.02 0.03 0.07 0.10 0.10 0.13 0.01 0.01 0.10 0.11 0.19 0.24 0.38 0.46 0.26 0.27 0.43 0.76 0.75 1.09 1.09 0.94 1.06 1.21 1.47 1.45 1.36 2.07 2.85 2.90 3.85 4.65 5.84 5.46 6.15 7.50 8.30 10.62 12.70 16.65 20.95 25.41 26.32 20.20 16.60 11.24 7.85 7.62 20.19 7.32 2.87 5.18"
+ sensitivity="-37.0" max_spl="132.5" min_spl="28.5" orientation="0.0 1.0 0.0" geometric_location="0.0546 0.1456 0.00415" />
+ <microphone valid_mask="31" device_id="builtin_mic_3" type="AUDIO_DEVICE_IN_BUILTIN_MIC" address="top" location="AUDIO_MICROPHONE_LOCATION_MAINBODY"
+ group="0" index_in_the_group="2" directionality="AUDIO_MICROPHONE_DIRECTIONALITY_OMNI" num_frequency_responses="92"
+ frequencies="100.00 106.00 112.00 118.00 125.00 132.00 140.00 150.00 160.00 170.00 180.00 190.00 200.00 212.00 224.00 236.00 250.00 265.00 280.00 300.00 315.00 335.00 355.00 375.00 400.00 425.00 450.00 475.00 500.00 530.00 560.00 600.00 630.00 670.00 710.00 750.00 800.00 850.00 900.00 950.00 1000.00 1060.00 1120.00 1180.00 1250.00 1320.00 1400.00 1500.00 1600.00 1700.00 1800.00 1900.00 2000.00 2120.00 2240.00 2360.00 2500.00 2650.00 2800.00 3000.00 3150.00 3350.00 3550.00 3750.00 4000.00 4250.00 4500.00 4750.00 5000.00 5300.00 5600.00 6000.00 6300.00 6700.00 7100.00 7500.00 8000.00 8500.00 9000.00 9500.00 10000.00 10600.00 11200.00 11800.00 12500.00 13200.00 14000.00 15000.00 16000.00 17000.00 18000.00 19000.00"
+ responses="-9.24 -9.31 -9.39 -9.45 -9.46 -9.47 -9.50 -9.52 -9.51 -9.52 -9.51 -9.50 -9.49 -9.47 -9.48 -9.49 -9.48 -9.50 -9.51 -9.53 -9.55 -9.59 -9.63 -9.67 -9.58 -9.57 -9.65 -9.68 -9.71 -9.75 -9.79 -9.84 -9.87 -9.87 -9.90 -9.90 -9.91 -9.97 -10.01 -10.05 -9.85 -9.93 -9.94 -9.98 -10.04 -10.12 -10.28 -10.25 -10.01 -9.86 -9.81 -9.82 -9.61 -9.46 -8.27 -8.42 -8.98 -8.99 -8.82 -9.21 -8.92 -8.97 -9.30 -9.44 -9.52 -9.28 -9.09 -8.81 -7.02 -5.72 -5.30 -7.26 -8.39 -12.28 -8.23 -6.99 -5.52 -4.87 -3.82 -6.09 0.00 -2.15 -0.26 1.48 5.22 10.92 6.41 9.55 12.96 3.35 22.00 19.75"
+ sensitivity="-37.0" max_spl="132.5" min_spl="28.5" orientation="0.0 0.0 1.0" geometric_location="0.0274 0.14065 0.0079" />
+ </microphone_characteristics>
+ <snd_devices>
+ <input_snd_device>
+ <input_snd_device_mic_mapping>
+ <snd_dev in_snd_device="SND_DEVICE_IN_CAMCORDER_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_REC_MIC_AEC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_REC_MIC_AEC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_REC_MIC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_REC_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_DMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_DMIC_TMUS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_SPEAKER_DMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_DMIC_AEC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_DMIC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_DMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC_AEC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_UNPROCESSED_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_UNPROCESSED_STEREO_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_UNPROCESSED_THREE_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_DMIC_STEREO">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC_STEREO">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ </input_snd_device_mic_mapping>
+ </input_snd_device>
+ </snd_devices>
+</audio_platform_info>
diff --git a/configs/kona/audio_platform_info_qrd.xml b/configs/kona/audio_platform_info_qrd.xml
new file mode 100644
index 0000000..199a352
--- /dev/null
+++ b/configs/kona/audio_platform_info_qrd.xml
@@ -0,0 +1,380 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!-- Copyright (c) 2018, 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="TX_CDC_DMA_TX_3" codec_type="internal"/>
+ <device name="AUDIO_DEVICE_IN_BACK_MIC" interface="TX_CDC_DMA_TX_3" codec_type="internal"/>
+ </interface_names>
+ <pcm_ids>
+ <usecase name="USECASE_AUDIO_PLAYBACK_LOW_LATENCY" type="out" id="9"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD" type="out" id="8"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD2" type="out" id="11"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD3" type="out" id="12"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD4" type="out" id="24"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD5" type="out" id="25"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD6" type="out" id="26"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD7" type="out" id="27"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_OFFLOAD8" type="out" id="28"/>
+ <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="15"/>
+ <usecase name="USECASE_VOICEMMODE2_CALL" type="out" id="15"/>
+ <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="30"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_FM" type="in" id="29"/>
+ <usecase name="USECASE_AUDIO_SPKR_CALIB_RX" type="out" id="30"/>
+ <usecase name="USECASE_AUDIO_SPKR_CALIB_TX" type="in" id="35"/>
+ <usecase name="USECASE_AUDIO_PLAYBACK_AFE_PROXY" type="out" id="5"/>
+ <usecase name="USECASE_AUDIO_RECORD_AFE_PROXY" type="in" id="6"/>
+ <usecase name="USECASE_AUDIO_RECORD_LOW_LATENCY" type="in" id="13" />
+ <usecase name="USECASE_AUDIO_PLAYBACK_ULL" type="out" id="13" />
+ <usecase name="USECASE_AUDIO_PLAYBACK_SILENCE" type="out" id="23" />
+ <usecase name="USECASE_AUDIO_PLAYBACK_VOIP" type="out" id="12" />
+ <usecase name="USECASE_AUDIO_RECORD_VOIP" type="in" id="12" />
+ <usecase name="USECASE_AUDIO_HFP_SCO" type="in" id="12" />
+ <usecase name="USECASE_AUDIO_HFP_SCO_WB" type="in" id="12" />
+ <usecase name="USECASE_AUDIO_PLAYBACK_MMAP" type="out" id="29" />
+ <usecase name="USECASE_AUDIO_RECORD_MMAP" type="in" id="29" />
+ <usecase name="USECASE_AUDIO_A2DP_ABR_FEEDBACK" type="in" id="40" />
+ <usecase name="USECASE_INCALL_MUSIC_UPLINK" type="out" id="23" />
+ </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="true_32_bit" value="true"/>
+ <param key="native_audio_mode" value="true"/>
+ <param key="hfp_pcm_dev_id" value="39"/>
+ <param key="input_mic_max_count" value="2"/>
+ </config_params>
+ <acdb_ids>
+ <device name="SND_DEVICE_OUT_SPEAKER" acdb_id="15"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_REVERSE" 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"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_MIC" acdb_id="143"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_STEREO_MIC" acdb_id="144"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_THREE_MIC" acdb_id="145"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_QUAD_MIC" acdb_id="146"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC" acdb_id="147"/>
+ <device name="SND_DEVICE_IN_HANDSET_GENERIC_QMIC" acdb_id="157"/>
+ </acdb_ids>
+ <backend_names>
+ <device name="SND_DEVICE_OUT_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_HEADPHONES_44_1" backend="headphones-44.1" interface="RX_CDC_DMA_RX_0"/>
+ <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="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_ANC_HEADSET" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES" backend="speaker-and-headphones" interface="WSA_CDC_DMA_RX_0-and-RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_LINE" backend="speaker-and-headphones" interface="WSA_CDC_DMA_RX_0-and-RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_ANC_HEADSET" backend="speaker-and-headphones" interface="WSA_CDC_DMA_RX_0-and-RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_ANC_HEADSET" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_LINE" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_TTY_FULL_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES" backend="headphones" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_HANDSET" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_EXTERNAL_1" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_EXTERNAL_2" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_REVERSE" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_VBAT" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES_EXTERNAL_1" interface="WSA_CDC_DMA_RX_0-and-RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES_EXTERNAL_2" interface="WSA_CDC_DMA_RX_0-and-RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_HANDSET" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_IN_HANDSET_GENERIC_QMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_VBAT" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_HDMI" interface="WSA_CDC_DMA_RX_0-and-HDMI"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_DISPLAY_PORT" interface="WSA_CDC_DMA_RX_0-and-DISPLAY_PORT"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP" interface="WSA_CDC_DMA_RX_0-and-SLIMBUS_7_RX"/>
+ <device name="SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_ANC_FB_HEADSET" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_ANC_FB_HEADSET" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_ANC_HANDSET" interface="RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_PROTECTED" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_WSA" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_WSA" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_WSA" interface="WSA_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_EXTERNAL" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_MIC_AEC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_MIC_AEC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HEADSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HEADSET_MIC_FLUENCE" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_SPEAKER_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_HEADSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <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="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_DMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_SPEAKER_DMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_SPEAKER_QMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_MIC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_DMIC_STEREO" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_AANC_HANDSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_QUAD_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_STEREO_DMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_STEREO_DMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK" interface="WSA_CDC_DMA_TX_0"/>
+ <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_1" interface="WSA_CDC_DMA_TX_0"/>
+ <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_2" interface="WSA_CDC_DMA_TX_0"/>
+ <device name="SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BROADSIDE" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_BROADSIDE" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_BROADSIDE" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_NS_BROADSIDE" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_FLUENCE_DMIC_AANC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_QMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_QMIC_AEC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_QMIC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_THREE_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_TMIC_FLUENCE_PRO" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_TMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_TMIC_AEC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_TMIC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_HANDSET_TMIC_AEC_NS" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_VOICE_REC_TMIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_STEREO_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_THREE_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_QUAD_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC" interface="TX_CDC_DMA_TX_3"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_AND_VOICE_HEADPHONES" backend="speaker-and-headphones" interface="WSA_CDC_DMA_RX_0-and-RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_VOICE_SPEAKER_AND_VOICE_ANC_HEADSET" backend="speaker-and-headphones" interface="WSA_CDC_DMA_RX_0-and-RX_CDC_DMA_RX_0"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_BT_SCO" backend="speaker-and-bt-sco" interface="WSA_CDC_DMA_RX_0-and-SLIMBUS_7_RX"/>
+ <device name="SND_DEVICE_OUT_SPEAKER_AND_BT_SCO_WB" backend="speaker-and-bt-sco-wb" interface="WSA_CDC_DMA_RX_0-and-SLIMBUS_7_RX"/>
+ </backend_names>
+ <!-- below values are for ref purpose to OEM, doesn't contain actual hardware info on MTP -->
+ <microphone_characteristics>
+ <microphone valid_mask="31" device_id="builtin_mic_1" type="AUDIO_DEVICE_IN_BUILTIN_MIC" address="bottom" location="AUDIO_MICROPHONE_LOCATION_MAINBODY"
+ group="0" index_in_the_group="0" directionality="AUDIO_MICROPHONE_DIRECTIONALITY_OMNI" num_frequency_responses="93"
+ frequencies="100.00 106.00 112.00 118.00 125.00 132.00 140.00 150.00 160.00 170.00 180.00 190.00 200.00 212.00 224.00 236.00 250.00 265.00 280.00 300.00 315.00 335.00 355.00 375.00 400.00 425.00 450.00 475.00 500.00 530.00 560.00 600.00 630.00 670.00 710.00 750.00 800.00 850.00 900.00 950.00 1000.00 1060.00 1120.00 1180.00 1250.00 1320.00 1400.00 1500.00 1600.00 1700.00 1800.00 1900.00 2000.00 2120.00 2240.00 2360.00 2500.00 2650.00 2800.00 3000.00 3150.00 3350.00 3550.00 3750.00 4000.00 4250.00 4500.00 4750.00 5000.00 5300.00 5600.00 6000.00 6300.00 6700.00 7100.00 7500.00 8000.00 8500.00 9000.00 9500.00 10000.00 10600.00 11200.00 11800.00 12500.00 13200.00 14000.00 15000.00 16000.00 17000.00 18000.00 19000.00 20000.00"
+ responses="-0.78 -0.71 -0.64 -0.60 -0.55 -0.50 -0.47 -0.42 -0.39 -0.36 -0.34 -0.33 -0.32 -0.29 -0.28 -0.28 -0.27 -0.25 -0.25 -0.24 -0.23 -0.23 -0.22 -0.22 -0.19 -0.17 -0.15 -0.15 -0.14 -0.14 -0.12 -0.11 -0.10 -0.10 -0.08 -0.07 -0.07 -0.04 -0.03 -0.01 0.00 0.04 0.06 0.07 0.08 0.13 0.09 0.14 0.19 0.23 0.28 0.29 0.31 0.37 0.88 0.86 0.77 0.78 0.84 0.86 1.05 1.12 1.18 1.25 1.43 1.66 1.83 2.02 2.23 2.59 2.84 3.35 4.01 6.82 6.62 6.42 7.30 8.23 7.54 12.68 13.76 18.69 19.68 20.90 23.70 25.10 21.65 16.18 18.84 25.44 23.48 23.22 24.89"
+ sensitivity="-37.0" max_spl="132.5" min_spl="28.5" orientation="0.0 0.0 1.0" geometric_location="0.0269 0.0058 0.0079" />
+ <microphone valid_mask="31" device_id="builtin_mic_2" type="AUDIO_DEVICE_IN_BACK_MIC" address="back" location="AUDIO_MICROPHONE_LOCATION_MAINBODY"
+ group="0" index_in_the_group="1" directionality="AUDIO_MICROPHONE_DIRECTIONALITY_OMNI" num_frequency_responses="92"
+ frequencies="106.00 112.00 118.00 125.00 132.00 140.00 150.00 160.00 170.00 180.00 190.00 200.00 212.00 224.00 236.00 250.00 265.00 280.00 300.00 315.00 335.00 355.00 375.00 400.00 425.00 450.00 475.00 500.00 530.00 560.00 600.00 630.00 670.00 710.00 750.00 800.00 850.00 900.00 950.00 1000.00 1060.00 1120.00 1180.00 1250.00 1320.00 1400.00 1500.00 1600.00 1700.00 1800.00 1900.00 2000.00 2120.00 2240.00 2360.00 2500.00 2650.00 2800.00 3000.00 3150.00 3350.00 3550.00 3750.00 4000.00 4250.00 4500.00 4750.00 5000.00 5300.00 5600.00 6000.00 6300.00 6700.00 7100.00 7500.00 8000.00 8500.00 9000.00 9500.00 10000.00 10600.00 11200.00 11800.00 12500.00 13200.00 14000.00 15000.00 16000.00 17000.00 18000.00 19000.00 20000.00"
+ responses="-0.75 -0.74 -0.69 -0.65 -0.62 -0.61 -0.56 -0.53 -0.50 -0.47 -0.43 -0.40 -0.37 -0.36 -0.33 -0.30 -0.28 -0.25 -0.24 -0.24 -0.24 -0.25 -0.24 -0.12 -0.10 -0.08 -0.09 -0.07 -0.07 -0.06 -0.06 -0.06 -0.05 -0.04 -0.05 -0.04 -0.01 0.02 0.02 0.00 0.02 0.03 0.07 0.10 0.10 0.13 0.01 0.01 0.10 0.11 0.19 0.24 0.38 0.46 0.26 0.27 0.43 0.76 0.75 1.09 1.09 0.94 1.06 1.21 1.47 1.45 1.36 2.07 2.85 2.90 3.85 4.65 5.84 5.46 6.15 7.50 8.30 10.62 12.70 16.65 20.95 25.41 26.32 20.20 16.60 11.24 7.85 7.62 20.19 7.32 2.87 5.18"
+ sensitivity="-37.0" max_spl="132.5" min_spl="28.5" orientation="0.0 1.0 0.0" geometric_location="0.0546 0.1456 0.00415" />
+ <microphone valid_mask="31" device_id="builtin_mic_3" type="AUDIO_DEVICE_IN_BUILTIN_MIC" address="top" location="AUDIO_MICROPHONE_LOCATION_MAINBODY"
+ group="0" index_in_the_group="2" directionality="AUDIO_MICROPHONE_DIRECTIONALITY_OMNI" num_frequency_responses="92"
+ frequencies="100.00 106.00 112.00 118.00 125.00 132.00 140.00 150.00 160.00 170.00 180.00 190.00 200.00 212.00 224.00 236.00 250.00 265.00 280.00 300.00 315.00 335.00 355.00 375.00 400.00 425.00 450.00 475.00 500.00 530.00 560.00 600.00 630.00 670.00 710.00 750.00 800.00 850.00 900.00 950.00 1000.00 1060.00 1120.00 1180.00 1250.00 1320.00 1400.00 1500.00 1600.00 1700.00 1800.00 1900.00 2000.00 2120.00 2240.00 2360.00 2500.00 2650.00 2800.00 3000.00 3150.00 3350.00 3550.00 3750.00 4000.00 4250.00 4500.00 4750.00 5000.00 5300.00 5600.00 6000.00 6300.00 6700.00 7100.00 7500.00 8000.00 8500.00 9000.00 9500.00 10000.00 10600.00 11200.00 11800.00 12500.00 13200.00 14000.00 15000.00 16000.00 17000.00 18000.00 19000.00"
+ responses="-9.24 -9.31 -9.39 -9.45 -9.46 -9.47 -9.50 -9.52 -9.51 -9.52 -9.51 -9.50 -9.49 -9.47 -9.48 -9.49 -9.48 -9.50 -9.51 -9.53 -9.55 -9.59 -9.63 -9.67 -9.58 -9.57 -9.65 -9.68 -9.71 -9.75 -9.79 -9.84 -9.87 -9.87 -9.90 -9.90 -9.91 -9.97 -10.01 -10.05 -9.85 -9.93 -9.94 -9.98 -10.04 -10.12 -10.28 -10.25 -10.01 -9.86 -9.81 -9.82 -9.61 -9.46 -8.27 -8.42 -8.98 -8.99 -8.82 -9.21 -8.92 -8.97 -9.30 -9.44 -9.52 -9.28 -9.09 -8.81 -7.02 -5.72 -5.30 -7.26 -8.39 -12.28 -8.23 -6.99 -5.52 -4.87 -3.82 -6.09 0.00 -2.15 -0.26 1.48 5.22 10.92 6.41 9.55 12.96 3.35 22.00 19.75"
+ sensitivity="-37.0" max_spl="132.5" min_spl="28.5" orientation="0.0 0.0 1.0" geometric_location="0.0274 0.14065 0.0079" />
+ </microphone_characteristics>
+ <snd_devices>
+ <input_snd_device>
+ <input_snd_device_mic_mapping>
+ <snd_dev in_snd_device="SND_DEVICE_IN_CAMCORDER_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_REC_MIC_AEC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_REC_MIC_AEC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_REC_MIC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_REC_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_DMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_DMIC_TMUS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_VOICE_SPEAKER_DMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_DMIC_AEC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_DMIC_AEC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_DMIC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_DMIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC_AEC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC_NS">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_UNPROCESSED_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_UNPROCESSED_STEREO_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_UNPROCESSED_THREE_MIC">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_DIRECT"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_HANDSET_DMIC_STEREO">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ <snd_dev in_snd_device="SND_DEVICE_IN_SPEAKER_DMIC_STEREO">
+ <mic_info mic_device_id="builtin_mic_1"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_2"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ <mic_info mic_device_id="builtin_mic_3"
+ channel_mapping="AUDIO_MICROPHONE_CHANNEL_MAPPING_PROCESSED"/>
+ </snd_dev>
+ </input_snd_device_mic_mapping>
+ </input_snd_device>
+ </snd_devices>
+</audio_platform_info>
diff --git a/configs/kona/audio_policy_configuration.xml b/configs/kona/audio_policy_configuration.xml
new file mode 100644
index 0000000..2452f86
--- /dev/null
+++ b/configs/kona/audio_policy_configuration.xml
@@ -0,0 +1,457 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!-- Copyright (c) 2016-2018, 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="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="hifi_playback" role="source" />
+ <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="incall_music_uplink" role="source"
+ flags="AUDIO_OUTPUT_FLAG_INCALL_MUSIC">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="8000,16000,48000"
+ channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ </mixPort>
+
+ <mixPort name="primary input" role="sink" maxOpenCount="2" maxActiveCount="2">
+ <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="usb_surround_sound" role="sink">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,88200,96000,176400,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,AUDIO_CHANNEL_IN_5POINT1,AUDIO_CHANNEL_INDEX_MASK_6,AUDIO_CHANNEL_IN_7POINT1,AUDIO_CHANNEL_INDEX_MASK_8"/>
+ <profile name="" format="AUDIO_FORMAT_PCM_32_BIT"
+ samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,88200,96000,176400,192000"
+ channelMasks="AUDIO_CHANNEL_IN_5POINT1,AUDIO_CHANNEL_INDEX_MASK_6,AUDIO_CHANNEL_IN_7POINT1,AUDIO_CHANNEL_INDEX_MASK_8"/>
+ <profile name="" format="AUDIO_FORMAT_PCM_FLOAT"
+ samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,88200,96000,176400,192000"
+ channelMasks="AUDIO_CHANNEL_IN_5POINT1,AUDIO_CHANNEL_INDEX_MASK_6,AUDIO_CHANNEL_IN_7POINT1,AUDIO_CHANNEL_INDEX_MASK_8"/>
+ </mixPort>
+ <mixPort name="record_24" role="sink">
+ <profile name="" format="AUDIO_FORMAT_PCM_24_BIT_PACKED"
+ samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,96000,192000"
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4"/>
+ <profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
+ samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,96000,192000"
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4"/>
+ <profile name="" format="AUDIO_FORMAT_PCM_FLOAT"
+ samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,96000,192000"
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3,AUDIO_CHANNEL_INDEX_MASK_4"/>
+ </mixPort>
+ <mixPort name="voice_rx" role="sink">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="8000,16000,48000" channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO"/>
+ </mixPort>
+ <mixPort name="mmap_no_irq_in" role="sink" flags="AUDIO_INPUT_FLAG_MMAP_NOIRQ">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_IN_FRONT_BACK,AUDIO_CHANNEL_INDEX_MASK_3"/>
+ </mixPort>
+ <mixPort name="hifi_input" role="sink" />
+ </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="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="dynamic"/>
+ </devicePort>
+ <devicePort tagName="USB Headset Out" type="AUDIO_DEVICE_OUT_USB_HEADSET" role="sink">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000" channelMasks="dynamic"/>
+ </devicePort>
+
+ <!-- Input devices declaration, i.e. Source DEVICE PORT -->
+ <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_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_INDEX_MASK_6,AUDIO_CHANNEL_IN_7POINT1,AUDIO_CHANNEL_INDEX_MASK_8"/>
+ <profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000"
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_INDEX_MASK_6,AUDIO_CHANNEL_IN_7POINT1,AUDIO_CHANNEL_INDEX_MASK_8"/>
+ <!-- edit as needed -->
+ <profile name="" format="AUDIO_FORMAT_PCM_32_BIT"
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000"
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_INDEX_MASK_6,AUDIO_CHANNEL_IN_7POINT1,AUDIO_CHANNEL_INDEX_MASK_8"/>
+ </devicePort>
+ <devicePort tagName="USB Headset In" type="AUDIO_DEVICE_IN_USB_HEADSET" role="source">
+ <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000"
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_INDEX_MASK_6,AUDIO_CHANNEL_IN_7POINT1,AUDIO_CHANNEL_INDEX_MASK_8"/>
+ <profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000"
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_INDEX_MASK_6,AUDIO_CHANNEL_IN_7POINT1,AUDIO_CHANNEL_INDEX_MASK_8"/>
+ <!-- edit as needed -->
+ <profile name="" format="AUDIO_FORMAT_PCM_32_BIT"
+ samplingRates="44100,48000,64000,88200,96000,128000,176400,192000"
+ channelMasks="AUDIO_CHANNEL_IN_MONO,AUDIO_CHANNEL_IN_STEREO,AUDIO_CHANNEL_INDEX_MASK_6,AUDIO_CHANNEL_IN_7POINT1,AUDIO_CHANNEL_INDEX_MASK_8"/>
+ </devicePort>
+
+ </devicePorts>
+ <!-- route declaration, i.e. list all available sources for a given sink -->
+ <routes>
+ <route type="mix" sink="Earpiece"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
+ <route type="mix" sink="Speaker"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out"/>
+ <route type="mix" sink="Wired Headset"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,dsd_compress_passthrough,voip_rx,mmap_no_irq_out"/>
+ <route type="mix" sink="Wired Headphones"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,dsd_compress_passthrough,voip_rx,mmap_no_irq_out"/>
+ <route type="mix" sink="Line"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,dsd_compress_passthrough,voip_rx,mmap_no_irq_out"/>
+ <route type="mix" sink="HDMI"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,compress_passthrough,voip_rx"/>
+ <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"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
+ <route type="mix" sink="BT SCO Headset"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
+ <route type="mix" sink="BT SCO Car Kit"
+ 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,mmap_no_irq_out,hifi_playback"/>
+ <route type="mix" sink="USB Headset Out"
+ sources="primary output,raw,deep_buffer,direct_pcm,compressed_offload,voip_rx,mmap_no_irq_out,hifi_playback"/>
+ <route type="mix" sink="Telephony Tx"
+ sources="voice_tx,incall_music_uplink"/>
+ <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,USB Headset In,Telephony Rx"/>
+ <route type="mix" sink="surround_sound"
+ sources="Built-In Mic,Built-In Back Mic"/>
+ <route type="mix" sink="usb_surround_sound"
+ sources="USB Device In,USB Headset In"/>
+ <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,USB Headset In"/>
+ <route type="mix" sink="BT A2DP Out"
+ sources="primary output,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
+ <route type="mix" sink="BT A2DP Headphones"
+ sources="primary output,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
+ <route type="mix" sink="BT A2DP Speaker"
+ sources="primary output,deep_buffer,direct_pcm,compressed_offload,voip_rx"/>
+ <route type="mix" sink="hifi_input" sources="USB Device In,USB Headset In" />
+ </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/kona/kona.mk b/configs/kona/kona.mk
new file mode 100644
index 0000000..93e4ca0
--- /dev/null
+++ b/configs/kona/kona.mk
@@ -0,0 +1,230 @@
+#BOARD_USES_GENERIC_AUDIO := true
+#
+#AUDIO_FEATURE_FLAGS
+BOARD_USES_ALSA_AUDIO := true
+TARGET_USES_AOSP_FOR_AUDIO := false
+
+ifneq ($(TARGET_USES_AOSP_FOR_AUDIO), true)
+USE_CUSTOM_AUDIO_POLICY := 1
+AUDIO_FEATURE_ENABLED_COMPRESS_CAPTURE := false
+AUDIO_FEATURE_ENABLED_COMPRESS_VOIP := false
+AUDIO_FEATURE_ENABLED_DYNAMIC_ECNS := 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
+DOLBY_ENABLE := false
+endif
+
+USE_XML_AUDIO_POLICY_CONF := 1
+AUDIO_FEATURE_ENABLED_DLKM := true
+BOARD_SUPPORTS_SOUND_TRIGGER := true
+AUDIO_FEATURE_ENABLED_INSTANCE_ID := true
+AUDIO_USE_LL_AS_PRIMARY_OUTPUT := 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 := true
+AUDIO_FEATURE_ENABLED_MULTI_VOICE_SESSIONS := true
+AUDIO_FEATURE_ENABLED_KPI_OPTIMIZE := true
+AUDIO_FEATURE_ENABLED_SPKR_PROTECTION := true
+AUDIO_FEATURE_ENABLED_ACDB_LICENSE := false
+AUDIO_FEATURE_ENABLED_DEV_ARBI := false
+AUDIO_FEATURE_ENABLED_DYNAMIC_LOG := true
+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_ENABLED_SVA_MULTI_STAGE := true
+AUDIO_FEATURE_ENABLED_BATTERY_LISTENER := true
+##AUDIO_FEATURE_FLAGS
+
+#Audio Specific device overlays
+DEVICE_PACKAGE_OVERLAYS += hardware/qcom/audio/configs/common/overlay
+
+PRODUCT_COPY_FILES += \
+ hardware/qcom/audio/configs/kona/audio_io_policy.conf:$(TARGET_COPY_OUT_VENDOR)/etc/audio_io_policy.conf \
+ hardware/qcom/audio/configs/kona/audio_effects.conf:$(TARGET_COPY_OUT_VENDOR)/etc/audio_effects.conf \
+ hardware/qcom/audio/configs/kona/audio_effects.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_effects.xml \
+ hardware/qcom/audio/configs/kona/sound_trigger_platform_info.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_platform_info.xml \
+ hardware/qcom/audio/configs/kona/audio_platform_info.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_platform_info.xml \
+ hardware/qcom/audio/configs/kona/audio_platform_info_qrd.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_platform_info_qrd.xml \
+ hardware/qcom/audio/configs/kona/audio_platform_info_intcodec.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_platform_info_intcodec.xml \
+ hardware/qcom/audio/configs/kona/sound_trigger_mixer_paths.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_mixer_paths.xml \
+ hardware/qcom/audio/configs/kona/sound_trigger_mixer_paths_qrd.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_mixer_paths_qrd.xml \
+ hardware/qcom/audio/configs/kona/mixer_paths_mtp.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_mtp.xml \
+ hardware/qcom/audio/configs/kona/mixer_paths_qrd.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_qrd.xml \
+
+#XML Audio configuration files
+ifneq ($(TARGET_USES_AOSP_FOR_AUDIO), true)
+PRODUCT_COPY_FILES += \
+ $(TOPDIR)hardware/qcom/audio/configs/kona/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
+
+# 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=32
+
+#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-aptxtws-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
+
+#audio becoming noisy intent broadcast delay
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.noisy.broadcast.delay=600
+
+#offload pausetime out duration to 3 secs to inline with other outputs
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.offload.pstimeout.secs=3
+
+#Set AudioFlinger client heap size
+PRODUCT_PROPERTY_OVERRIDES += \
+ro.af.client_heap_size_kbyte=7168
+
+#Set HAL buffer size to samples equal to 3 ms
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio_hal.in_period_size=144
+
+#Set HAL buffer size to 3 ms
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio_hal.period_multiplier=3
+
+#ADM Buffering size in ms
+PRODUCT_PROPERTY_OVERRIDES += \
+vendor.audio.adm.buffering.ms=2
+
+# for HIDL related packages
+PRODUCT_PACKAGES += \
+ android.hardware.audio@2.0-service \
+ android.hardware.audio@2.0-impl \
+ android.hardware.audio.effect@2.0-impl \
+ android.hardware.soundtrigger@2.1-impl \
+ android.hardware.audio@4.0 \
+ android.hardware.audio.common@4.0 \
+ android.hardware.audio.common@4.0-util \
+ android.hardware.audio@4.0-impl \
+ android.hardware.audio.effect@4.0 \
+ android.hardware.audio.effect@4.0-impl
diff --git a/configs/kona/listen_platform_info.xml b/configs/kona/listen_platform_info.xml
new file mode 100644
index 0000000..5c49ac8
--- /dev/null
+++ b/configs/kona/listen_platform_info.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--- Copyright (c) 2014, 2016-2018, 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/kona/mixer_paths_mtp.xml b/configs/kona/mixer_paths_mtp.xml
new file mode 100644
index 0000000..dbdeeab
--- /dev/null
+++ b/configs/kona/mixer_paths_mtp.xml
@@ -0,0 +1,2559 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!-- Copyright (c) 2015-2018, 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_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="MultiMedia5 Mixer AFE_PCM_TX" value="0" />
+ <ctl name="MultiMedia5 Mixer TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="MultiMedia1 Mixer TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="MultiMedia1 Mixer SLIM_7_TX" value="0" />
+ <ctl name="MultiMedia8 Mixer SLIM_7_TX" value="0" />
+ <ctl name="MultiMedia10 Mixer TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="MultiMedia10 Mixer SLIM_7_TX" value="0" />
+ <ctl name="MultiMedia10 Mixer AFE_PCM_TX" value="0" />
+ <ctl name="DISPLAY_PORT Mixer MultiMedia1" value="0" />
+ <ctl name="DISPLAY_PORT Mixer MultiMedia2" value="0" />
+ <ctl name="DISPLAY_PORT Mixer MultiMedia3" value="0" />
+ <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="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia1" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia2" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia3" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia4" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia5" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia7" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia8" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia10" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia11" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia12" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia13" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia14" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia15" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia16" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia1" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia2" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia3" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia4" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia5" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia7" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia8" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia10" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia11" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia12" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia13" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia14" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia15" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 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="MultiMedia1 Mixer USB_AUDIO_TX" value="0" />
+ <ctl name="MultiMedia2 Mixer USB_AUDIO_TX" value="0" />
+ <ctl name="MultiMedia5 Mixer USB_AUDIO_TX" value="0" />
+ <ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="0" />
+ <ctl name="MultiMedia10 Mixer USB_AUDIO_TX" value="0" />
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="WSA_CDC_DMA_RX_0 Channels" value="One" />
+ <ctl name="RX_CDC_DMA_RX_0 Channels" value="One" />
+ <ctl name="VI_FEED_TX Channels" value="Two" />
+ <ctl name="WSA_AIF_VI Mixer WSA_SPKR_VI_1" value="0" />
+ <ctl name="WSA_AIF_VI Mixer WSA_SPKR_VI_2" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Format" value="UNPACKED" />
+ <ctl name="WSA_CDC_DMA_TX_0 Format" value="UNPACKED" />
+ <ctl name="RX_CDC_DMA_RX_0 Format" value="UNPACKED" />
+ <ctl name="TX_CDC_DMA_TX_3 Format" value="UNPACKED" />
+ <!-- HFP start -->
+ <ctl name="HFP_SLIM7_UL_HL Switch" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Port Mixer SLIM_7_TX" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 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 MultiMedia2" 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="Tert MI2S LOOPBACK Volume" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Port Mixer TERT_MI2S_TX" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0_DL_HL Switch" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Port Mixer TERT_MI2S_TX" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0_DL_HL Switch" value="0" />
+ <ctl name="MultiMedia1 Mixer TERT_MI2S_TX" value="0" />
+ <ctl name="MultiMedia2 Mixer TERT_MI2S_TX" value="0" />
+ <!-- fm end -->
+
+ <!-- Multimode Voice1 -->
+ <ctl name="WSA_CDC_DMA_RX_0_Voice Mixer VoiceMMode1" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0_Voice Mixer VoiceMMode1" value="0" />
+ <ctl name="VoiceMMode1_Tx Mixer TX_CDC_DMA_TX_3_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" />
+ <!-- Multimode Voice1 Display-Port -->
+ <ctl name="DISPLAY_PORT_RX_Voice Mixer VoiceMMode1" value="0" />
+ <!-- Miltimode Voice1 end-->
+
+ <!-- Multimode Voice2 -->
+ <ctl name="WSA_CDC_DMA_RX_0_Voice Mixer VoiceMMode2" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0_Voice Mixer VoiceMMode2" value="0" />
+ <ctl name="VoiceMMode1_Tx Mixer TX_CDC_DMA_TX_3_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 Display-Port -->
+ <ctl name="DISPLAY_PORT_RX_Voice Mixer VoiceMMode2" 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" />
+ <ctl name="Incall_Music Audio Mixer MultiMedia9" value="0" />
+ <!-- Incall Music End -->
+
+ <!-- compress-voip-call start -->
+ <ctl name="WSA_CDC_DMA_RX_0_Voice Mixer Voip" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0_Voice Mixer Voip" value="0" />
+ <ctl name="Voip_Tx Mixer TX_CDC_DMA_TX_3_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 TX_CDC_DMA_TX_3" 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="WSA_CDC_DMA_RX_0_DL_HL Switch" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0_DL_HL Switch" value="0" />
+ <!-- ADSP testfwk end-->
+
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia3" value="0" />
+
+ <!-- Codec controls -->
+ <!-- WSA controls -->
+ <ctl name="WSA RX0 MUX" value="ZERO" />
+ <ctl name="WSA RX1 MUX" value="ZERO" />
+ <ctl name="WSA_RX0 INP0" value="ZERO" />
+ <ctl name="WSA_RX1 INP0" value="ZERO" />
+ <ctl name="WSA_AIF_VI Mixer WSA_SPKR_VI_1" value="0" />
+ <ctl name="WSA_AIF_VI Mixer WSA_SPKR_VI_2" value="0" />
+ <ctl name="WSA_RX_0_VI_FB_LCH_MUX" value="ZERO" />
+ <ctl name="WSA_RX_0_VI_FB_RCH_MUX" value="ZERO" />
+ <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" />
+
+ <!-- RX Controls -->
+ <ctl name="RX_MACRO RX0 MUX" value="ZERO" />
+ <ctl name="RX_MACRO RX1 MUX" value="ZERO" />
+ <ctl name="RX_Native" value="OFF" />
+ <ctl name="RX_CDC_DMA_RX_0 Channels" value="One" />
+ <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_CDC_DMA_RX_0 Audio Mixer MultiMedia1" value="0" />
+ <ctl name="RX INT0 DEM MUX" value="NORMAL_DSM_OUT" />
+ <ctl name="RX INT1 DEM MUX" value="NORMAL_DSM_OUT" />
+ <ctl name="RX_COMP1 Switch" value="0" />
+ <ctl name="RX_COMP2 Switch" value="0" />
+ <ctl name="HPHL_COMP Switch" value="0" />
+ <ctl name="HPHR_COMP Switch" value="0" />
+ <ctl name="EAR_RDAC Switch" value="0" />
+ <ctl name="HPHL_RDAC Switch" value="0" />
+ <ctl name="HPHR_RDAC Switch" value="0" />
+ <ctl name="RDAC3_MUX" value="ZERO" />
+
+ <!-- TX Controls -->
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="MultiMedia1 Mixer TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="ADC2_MIXER Switch" value="0" />
+ <ctl name="ADC2 MUX" value="ZERO" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC2" value="0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC3" value="0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC4" value="0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC5" value="0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC6" value="0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC7" value="0" />
+ <ctl name="TX DEC0 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX0" value="ZERO" />
+ <ctl name="TX SMIC MUX0" value="ZERO" />
+ <ctl name="TX DEC1 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX1" value="ZERO" />
+ <ctl name="TX SMIC MUX1" value="ZERO" />
+ <ctl name="TX DEC2 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX2" value="ZERO" />
+ <ctl name="TX SMIC MUX2" value="ZERO" />
+ <ctl name="TX DEC3 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX3" value="ZERO" />
+ <ctl name="TX SMIC MUX3" value="ZERO" />
+ <ctl name="TX DEC4 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX4" value="ZERO" />
+ <ctl name="TX SMIC MUX4" value="ZERO" />
+ <ctl name="TX DEC5 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX5" value="ZERO" />
+ <ctl name="TX SMIC MUX5" value="ZERO" />
+ <ctl name="TX DEC6 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX6" value="ZERO" />
+ <ctl name="TX SMIC MUX6" value="ZERO" />
+ <ctl name="TX DEC7 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX7" value="ZERO" />
+ <ctl name="TX SMIC MUX7" value="ZERO" />
+
+ <!-- Volume controls -->
+ <ctl name="WSA_RX0 Digital Volume" value="84" />
+ <ctl name="WSA_RX1 Digital Volume" value="84" />
+ <ctl name="RX_RX0 Digital Volume" value="84" />
+ <ctl name="RX_RX1 Digital Volume" value="84" />
+ <ctl name="RX_RX2 Digital Volume" value="84" />
+ <ctl name="HPHL Volume" value="20" />
+ <ctl name="HPHR Volume" value="20" />
+ <ctl name="EAR SPKR PA Gain" value="G_DEFAULT" />
+
+ <ctl name="TX_DEC0 Volume" value="84" />
+ <ctl name="TX_DEC1 Volume" value="84" />
+ <ctl name="TX_DEC2 Volume" value="84" />
+ <ctl name="TX_DEC3 Volume" value="84" />
+ <ctl name="TX_DEC4 Volume" value="84" />
+ <ctl name="TX_DEC5 Volume" value="84" />
+ <ctl name="TX_DEC6 Volume" value="84" />
+ <ctl name="TX_DEC7 Volume" value="84" />
+
+ <ctl name="ADC1 Volume" value="12" />
+ <ctl name="ADC2 Volume" value="12" />
+ <ctl name="ADC3 Volume" value="12" />
+
+ <!-- Compander controls -->
+ <ctl name="WSA_COMP1 Switch" value="0" />
+ <ctl name="WSA_COMP2 Switch" value="0" />
+ <ctl name="COMP7 Switch" value="0" />
+ <ctl name="COMP8 Switch" value="0" />
+
+ <!-- Headphone Default mode - AB -->
+ <ctl name="RX HPH Mode" value="CLS_AB" />
+
+ <!-- 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" />
+ <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" />
+
+ <!-- vbat related data -->
+ <ctl name="GSM mode Enable" value="OFF" />
+ <ctl name="WSA_Softclip0 Enable" value="0" />
+ <ctl name="WSA_Softclip1 Enable" value="0" />
+ <ctl name="WSA_RX INT0 VBAT WSA RX0 VBAT Enable" value="0" />
+ <ctl name="WSA_RX INT1 VBAT WSA RX1 VBAT Enable" value="0" />
+
+ <!-- Codec controls end -->
+
+ <!-- defaults for mmap record -->
+ <ctl name="MultiMedia16 Mixer TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="MultiMedia16 Mixer SLIM_7_TX" value="0" />
+ <ctl name="MultiMedia16 Mixer TERT_MI2S_TX" value="0" />
+ <ctl name="MultiMedia16 Mixer USB_AUDIO_TX" 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="WSA_CDC_DMA_RX_0" />
+ </path>
+
+ <path name="echo-reference headphones">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="RX_CDC_DMA_RX_0" />
+ </path>
+
+ <path name="echo-reference display-port">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="DISPLAY_PORT" />
+ </path>
+
+ <path name="echo-reference headphones-44.1">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="RX_CDC_DMA_RX_0" />
+ </path>
+
+ <path name="deep-buffer-playback">
+ <ctl name="WSA_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 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="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="WSA_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 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="low-latency-playback resume">
+ <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="WSA_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 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="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>
+
+ <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="WSA_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia4" value="1" />
+ </path>
+
+ <path name="compress-offload-playback headphones-44.1">
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia4" value="1" />
+ </path>
+
+ <path name="compress-offload-playback headphones-dsd">
+ <ctl name="RX_CDC_DMA_RX_0 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-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="WSA_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia7" value="1" />
+ </path>
+
+ <path name="compress-offload-playback2 headphones-44.1">
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia7" value="1" />
+
+ </path>
+
+ <path name="compress-offload-playback2 headphones-dsd">
+ <ctl name="RX_CDC_DMA_RX_0 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-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="WSA_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="compress-offload-playback3 headphones-44.1">
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="compress-offload-playback3 headphones-dsd">
+ <ctl name="RX_CDC_DMA_RX_0 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-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="WSA_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia11" value="1" />
+ </path>
+
+ <path name="compress-offload-playback4 headphones-44.1">
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia11" value="1" />
+ </path>
+
+ <path name="compress-offload-playback4 headphones-dsd">
+ <ctl name="RX_CDC_DMA_RX_0 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-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="WSA_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia12" value="1" />
+ </path>
+
+ <path name="compress-offload-playback5 headphones-44.1">
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia12" value="1" />
+ </path>
+
+ <path name="compress-offload-playback5 headphones-dsd">
+ <ctl name="RX_CDC_DMA_RX_0 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-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="WSA_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia13" value="1" />
+ </path>
+
+ <path name="compress-offload-playback6 headphones-44.1">
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia13" value="1" />
+ </path>
+
+ <path name="compress-offload-playback6 headphones-dsd">
+ <ctl name="RX_CDC_DMA_RX_0 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-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="WSA_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia14" value="1" />
+ </path>
+
+ <path name="compress-offload-playback7 headphones-44.1">
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia14" value="1" />
+ </path>
+
+ <path name="compress-offload-playback7 headphones-dsd">
+ <ctl name="RX_CDC_DMA_RX_0 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-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="WSA_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia15" value="1" />
+ </path>
+
+ <path name="compress-offload-playback8 headphones-44.1">
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia15" value="1" />
+ </path>
+
+ <path name="compress-offload-playback8 headphones-dsd">
+ <ctl name="RX_CDC_DMA_RX_0 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-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="WSA_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="compress-offload-playback9 headphones-44.1">
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="compress-offload-playback9 headphones-dsd">
+ <ctl name="RX_CDC_DMA_RX_0 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="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 TX_CDC_DMA_TX_3" 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 TERT_MI2S_TX" value="1" />
+ </path>
+
+ <path name="audio-record-compress">
+ <ctl name="MultiMedia8 Mixer TX_CDC_DMA_TX_3" 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 TX_CDC_DMA_TX_3" 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 TERT_MI2S_TX" value="1" />
+ </path>
+
+ <path name="fm-virtual-record capture-fm">
+ <ctl name="MultiMedia2 Mixer TERT_MI2S_TX" value="1" />
+ </path>
+
+ <path name="play-fm">
+ <ctl name="Tert MI2S LOOPBACK Volume" value="1" />
+ <ctl name="WSA_CDC_DMA_RX_0 Port Mixer TERT_MI2S_TX" value="1" />
+ <ctl name="WSA_CDC_DMA_RX_0_DL_HL Switch" value="1" />
+ </path>
+
+ <path name="play-fm headphones">
+ <ctl name="Tert MI2S LOOPBACK Volume" value="1" />
+ <ctl name="RX_CDC_DMA_RX_0 Port Mixer TERT_MI2S_TX" value="1" />
+ <ctl name="RX_CDC_DMA_RX_0_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">
+ </path>
+
+ <path name="hfp-sco headphones">
+ </path>
+
+ <path name="hfp-sco-wb">
+ <path name="hfp-sco" />
+ </path>
+
+ <path name="hfp-sco-wb headphones">
+ <path name="hfp-sco headphones" />
+ </path>
+
+ <path name="compress-voip-call">
+ <ctl name="WSA_CDC_DMA_RX_0_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer TX_CDC_DMA_TX_3_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 TX_CDC_DMA_TX_3_Voip" value="1" />
+ </path>
+
+ <path name="compress-voip-call headphones">
+ <ctl name="RX_CDC_DMA_RX_0_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer TX_CDC_DMA_TX_3_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 TX_CDC_DMA_TX_3_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="WSA_CDC_DMA_RX_0_Voice Mixer VoiceMMode1" value="1" />
+ <ctl name="VoiceMMode1_Tx Mixer TX_CDC_DMA_TX_3_MMode1" value="1" />
+ </path>
+
+ <path name="voicemmode1-call headphones">
+ <ctl name="RX_CDC_DMA_RX_0_Voice Mixer VoiceMMode1" value="1" />
+ <ctl name="VoiceMMode1_Tx Mixer TX_CDC_DMA_TX_3_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 TX_CDC_DMA_TX_3_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 display-port-and-usb-headset-mic">
+ <ctl name="DISPLAY_PORT_RX_Voice Mixer VoiceMMode1" value="1" />
+ <ctl name="VoiceMMode1_Tx Mixer USB_AUDIO_TX_MMode1" value="1" />
+ </path>
+
+ <path name="voicemmode1-call display-port">
+ <ctl name="DISPLAY_PORT_RX_Voice Mixer VoiceMMode1" value="1" />
+ <ctl name="VoiceMMode1_Tx Mixer TX_CDC_DMA_TX_3_MMode1" value="1" />
+ </path>
+
+ <path name="voicemmode2-call">
+ <ctl name="WSA_CDC_DMA_RX_0_Voice Mixer VoiceMMode2" value="1" />
+ <ctl name="VoiceMMode2_Tx Mixer TX_CDC_DMA_TX_3_MMode2" value="1" />
+ </path>
+
+ <path name="voicemmode2-call headphones">
+ <ctl name="RX_CDC_DMA_RX_0_Voice Mixer VoiceMMode2" value="1" />
+ <ctl name="VoiceMMode2_Tx Mixer TX_CDC_DMA_TX_3_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 TX_CDC_DMA_TX_3_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 display-port-and-usb-headset-mic">
+ <ctl name="DISPLAY_PORT_RX_Voice Mixer VoiceMMode2" value="1" />
+ <ctl name="VoiceMMode2_Tx Mixer USB_AUDIO_TX_MMode2" value="1" />
+ </path>
+
+ <path name="voicemmode2-call display-port">
+ <ctl name="DISPLAY_PORT_RX_Voice Mixer VoiceMMode2" value="1" />
+ <ctl name="VoiceMMode2_Tx Mixer TX_CDC_DMA_TX_3_MMode2" value="1" />
+ </path>
+
+ <!-- VoIP Rx settings -->
+ <path name="audio-playback-voip">
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip headphones">
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip bt-sco">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="audio-playback-voip bt-sco" />
+ </path>
+
+ <path name="audio-playback-voip bt-a2dp">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip speaker-and-display-port">
+ <path name="audio-playback-voip display-port" />
+ <path name="audio-playback-voip" />
+ </path>
+
+ <!-- VoIP Tx settings -->
+ <path name="audio-record-voip">
+ <ctl name="MultiMedia10 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="audio-record-voip usb-headset-mic">
+ <ctl name="MultiMedia10 Mixer USB_AUDIO_TX" value="1" />
+ </path>
+
+ <path name="audio-record-voip bt-sco">
+ <ctl name="MultiMedia10 Mixer SLIM_7_TX" value="1" />
+ </path>
+
+ <path name="audio-record-voip bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="audio-record-voip bt-sco" />
+ </path>
+
+ <path name="spkr-rx-calib">
+ <ctl name="WSA_CDC_DMA_RX_0_DL_HL Switch" value="1" />
+ </path>
+
+ <path name="spkr-vi-record">
+ </path>
+
+ <!-- These are actual sound device specific mixer settings -->
+ <path name="amic2">
+ <ctl name="TX DEC0 MUX" value="SWR_MIC" />
+ <ctl name="TX SMIC MUX0" value="ADC2" />
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="ADC2_MIXER Switch" value="1" />
+ <ctl name="ADC2 MUX" value="INP2" />
+ </path>
+
+ <path name="dmic1">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC0" />
+ </path>
+
+ <path name="dmic2">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC1" />
+ </path>
+
+ <path name="dmic3">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC2" />
+ </path>
+
+ <path name="dmic4">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC3" />
+ </path>
+
+ <path name="dmic5">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC4" />
+ </path>
+
+ <path name="dmic6">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC5" />
+ </path>
+
+ <path name="speaker">
+ <ctl name="WSA_CDC_DMA_RX_0 Channels" value="Two" />
+ <ctl name="WSA RX0 MUX" value="AIF1_PB" />
+ <ctl name="WSA RX1 MUX" value="AIF1_PB" />
+ <ctl name="WSA_RX0 INP0" value="RX0" />
+ <ctl name="WSA_RX1 INP0" value="RX1" />
+ <ctl name="WSA_COMP1 Switch" value="1" />
+ <ctl name="WSA_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" />
+ </path>
+
+ <path name="speaker-mono">
+ <ctl name="WSA_CDC_DMA_RX_0 Channels" value="One" />
+ <ctl name="WSA RX0 MUX" value="AIF1_PB" />
+ <ctl name="WSA_RX0 INP0" value="RX0" />
+ <ctl name="WSA_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" />
+ </path>
+
+ <path name="speaker-mono-2">
+ <ctl name="WSA_CDC_DMA_RX_0 Channels" value="One" />
+ <ctl name="WSA RX1 MUX" value="AIF1_PB" />
+ <ctl name="WSA_RX1 INP0" value="RX1" />
+ <ctl name="WSA_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" />
+ </path>
+
+
+ <path name="speaker-hdk">
+ <path name="speaker-mono" />
+ </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="IIR0 INP0 MUX" value="DEC0" />
+ <ctl name="RX INT0 MIX2 INP" value="SRC0" />
+ <ctl name="RX INT1 MIX2 INP" value="SRC0" />
+ </path>
+
+ <path name="sidetone-handset">
+ <path name="sidetone-iir" />
+ <ctl name="IIR0 INP0 Volume" value="54" />
+ <ctl name="IIR0 INP0 MUX" value="DEC0" />
+ <ctl name="RX INT2 MIX2 INP" value="SRC0" />
+ <ctl name="WSA_RX0 INT0 SIDETONE MIX" value="SRC0" />
+ </path>
+
+ <path name="afe-sidetone">
+ <ctl name="Voice Sidetone Enable" value="1" />
+ </path>
+
+ <path name="speaker-mic">
+ <path name="dmic3" />
+ </path>
+
+ <path name="speaker-mic-liquid">
+ <path name="dmic3" />
+ </path>
+
+ <path name="speaker-mic-sbc">
+ </path>
+
+ <path name="speaker-protected">
+ <ctl name="WSA_AIF_VI Mixer WSA_SPKR_VI_1" value="1" />
+ <ctl name="WSA_AIF_VI Mixer WSA_SPKR_VI_2" value="1" />
+ <ctl name="WSA_CDC_DMA_0 TX Format" value="PACKED_16B" />
+ <path name="speaker" />
+ <ctl name="VI_FEED_TX Channels" value="Two" />
+ <ctl name="WSA_RX_0_VI_FB_LCH_MUX" value="WSA_CDC_DMA_TX_0" />
+ <ctl name="WSA_RX_0_VI_FB_RCH_MUX" value="WSA_CDC_DMA_TX_0" />
+ </path>
+
+ <path name="voice-speaker-protected">
+ <ctl name="WSA_AIF_VI Mixer WSA_SPKR_VI_1" value="1" />
+ <ctl name="WSA_CDC_DMA_0 TX Format" value="PACKED_16B" />
+ <path name="speaker-mono" />
+ <ctl name="VI_FEED_TX Channels" value="One" />
+ <ctl name="WSA_RX_0_VI_FB_LCH_MUX" value="WSA_CDC_DMA_TX_0" />
+ </path>
+
+ <path name="voice-speaker-2-protected">
+ <ctl name="WSA_AIF_VI Mixer WSA_SPKR_VI_2" value="1" />
+ <ctl name="WSA_CDC_DMA_0 TX Format" value="PACKED_16B" />
+ <path name="speaker-mono-2" />
+ <ctl name="VI_FEED_TX Channels" value="One" />
+ <ctl name="WSA_RX_0_VI_FB_RCH_MUX" value="WSA_CDC_DMA_TX_0" />
+ </path>
+
+ <path name="voice-speaker-stereo-protected">
+ <path name="speaker-protected" />
+ </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="WSA_CDC_DMA_RX_0 Channels" value="One" />
+ <ctl name="WSA RX0 MUX" value="AIF1_PB" />
+ <ctl name="WSA_RX0 INP0" value="RX0" />
+ <ctl name="WSA_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="EAR SPKR PA Gain" value="G_6_DB" />
+ </path>
+
+ <path name="handset-mic">
+ <path name="dmic3" />
+ </path>
+
+ <path name="headphones">
+ <ctl name="RX_MACRO RX0 MUX" value="AIF1_PB" />
+ <ctl name="RX_MACRO RX1 MUX" value="AIF1_PB" />
+ <ctl name="RX_CDC_DMA_RX_0 Channels" value="Two" />
+ <ctl name="RX INT0_1 MIX1 INP0" value="RX0" />
+ <ctl name="RX INT1_1 MIX1 INP0" value="RX1" />
+ <ctl name="RX INT0 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX INT1 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX_COMP1 Switch" value="1" />
+ <ctl name="RX_COMP2 Switch" value="1" />
+ <ctl name="HPHL_COMP Switch" value="1" />
+ <ctl name="HPHR_COMP Switch" value="1" />
+ <ctl name="HPHL_RDAC Switch" value="1" />
+ <ctl name="HPHR_RDAC Switch" value="1" />
+ </path>
+
+ <path name="headphones-44.1">
+ <ctl name="RX_Native" value="ON" />
+ <path name="headphones" />
+ </path>
+
+ <path name="hph-highquality-mode">
+ </path>
+
+ <path name="hph-lowpower-mode">
+ </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-handset-hdk">
+ <path name="handset" />
+ </path>
+
+ <path name="voice-handset-tmus-hdk">
+ <path name="handset" />
+ </path>
+ <path name="voice-speaker">
+ <path name="speaker-mono" />
+ </path>
+
+ <path name="voice-speaker-stereo">
+ <path name="speaker" />
+ </path>
+
+ <path name="voice-speaker-2">
+ <path name="speaker-mono-2" />
+ </path>
+
+ <path name="voice-speaker-hdk">
+ <path name="speaker-mono" />
+ </path>
+
+ <path name="voice-speaker-fluid">
+ <path name="speaker-fluid" />
+ </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-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="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>
+
+ <!-- Dual MIC devices -->
+ <path name="handset-dmic-endfire">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="Two" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC2" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="TX DMIC MUX1" value="DMIC3" />
+ </path>
+
+ <path name="speaker-dmic-endfire">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="Two" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC2" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="TX DMIC MUX1" value="DMIC3" />
+ </path>
+
+ <path name="dmic-endfire">
+ <path name="handset-dmic-endfire" />
+ <ctl name="IIR0 INP0 MUX" value="DEC0" />
+ </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="TX_CDC_DMA_TX_3 Channels" value="Two" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="TX DMIC MUX1" value="DMIC2" />
+ </path>
+
+ <path name="dmic-broadside">
+ <path name="speaker-dmic-broadside" />
+ <ctl name="IIR0 INP0 MUX" value="DEC0" />
+ </path>
+
+ <path name="voice-speaker-dmic-broadside">
+ <path name="dmic-broadside" />
+ </path>
+
+ <!-- Tri MIC devices -->
+ <path name="three-mic">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="Three" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC2" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="TX DMIC MUX1" value="DMIC0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
+ <ctl name="TX DMIC MUX2" value="DMIC3" />
+ </path>
+
+ <path name="speaker-tmic">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="Three" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="TX DMIC MUX1" value="DMIC2" />
+ <ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
+ <ctl name="TX DMIC MUX2" value="DMIC3" />
+ </path>
+
+ <path name="voice-speaker-tmic">
+ <path name="speaker-tmic" />
+ </path>
+
+ <!-- Quad MIC devices -->
+ <path name="speaker-qmic">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="Four" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="TX DMIC MUX1" value="DMIC2" />
+ <ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
+ <ctl name="TX DMIC MUX2" value="DMIC3" />
+ <ctl name="TX_AIF1_CAP Mixer DEC3" value="1" />
+ <ctl name="TX DMIC MUX3" value="DMIC1" />
+ </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="RX_MACRO RX0 MUX" value="AIF1_PB" />
+ <ctl name="RX INT0_1 MIX1 INP0" value="RX0" />
+ <ctl name="RX INT0 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX_COMP1 Switch" value="1" />
+ <ctl name="HPHL_COMP Switch" value="1" />
+ <ctl name="HPHL_RDAC Switch" value="1" />
+ </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-hco-handset-hdk">
+ <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="dmic3" />
+ </path>
+
+ <path name="unprocessed-handset-mic">
+ <path name="handset-mic" />
+ </path>
+
+ <path name="unprocessed-mic">
+ <path name="unprocessed-handset-mic" />
+ </path>
+
+ <path name="unprocessed-stereo-mic">
+ <path name="voice-rec-dmic-ef" />
+ </path>
+
+ <path name="unprocessed-three-mic">
+ <path name="three-mic" />
+ </path>
+
+ <path name="unprocessed-quad-mic">
+ <path name="quad-mic" />
+ </path>
+
+ <path name="unprocessed-headset-mic">
+ <path name="headset-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="WSA_CDC_DMA_RX_0_DL_HL Switch" value="1" />
+ </path>
+ </path>
+
+ <path name="bt-a2dp">
+ <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>
+
+ <path name="mmap-playback">
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback headphones">
+ <ctl name="RX_CDC_DMA_RX_0 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-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 TX_CDC_DMA_TX_3" 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 TERT_MI2S_TX" value="1" />
+ </path>
+
+ <path name="mmap-record usb-headset-mic">
+ <ctl name="MultiMedia16 Mixer USB_AUDIO_TX" value="1" />
+ </path>
+
+ <path name="hifi-playback display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia2" value="1" />
+ </path>
+
+ <path name="hifi-playback afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia2" value="1" />
+ </path>
+
+ <path name="hifi-playback usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia2" value="1" />
+ </path>
+
+ <path name="hifi-playback usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia2" value="1" />
+ </path>
+
+ <path name="hifi-record">
+ <ctl name="MultiMedia2 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="hifi-record usb-headset-mic">
+ <ctl name="MultiMedia2 Mixer USB_AUDIO_TX" value="1" />
+ </path>
+
+ <path name="incall_music_uplink">
+ <ctl name="Incall_Music Audio Mixer MultiMedia9" value="1" />
+ </path>
+
+ <path name="incall_music_uplink speaker">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink handset">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink handset-hac">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink display-port">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink bt-sco">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink bt-sco-wb">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink speaker-and-display-port">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink afe-proxy">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink usb-headphones">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink usb-headset">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink speaker-and-usb-headphones">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink headphones">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink speaker-and-headphones">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink speaker-and-bt-sco">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink voice-tty-hco-handset">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink speaker-and-bt-a2dp">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink bt-a2dp">
+ <path name="incall_music_uplink" />
+ </path>
+ <path name="incall_music_uplink afe-proxy">
+ <path name="incall_music_uplink" />
+ </path>
+</mixer>
diff --git a/configs/kona/mixer_paths_qrd.xml b/configs/kona/mixer_paths_qrd.xml
new file mode 100644
index 0000000..a888aab
--- /dev/null
+++ b/configs/kona/mixer_paths_qrd.xml
@@ -0,0 +1,2416 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!-- Copyright (c) 2015-2018, 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_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="MultiMedia5 Mixer AFE_PCM_TX" value="0" />
+ <ctl name="MultiMedia5 Mixer TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="MultiMedia1 Mixer TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="MultiMedia1 Mixer SLIM_7_TX" value="0" />
+ <ctl name="MultiMedia8 Mixer SLIM_7_TX" value="0" />
+ <ctl name="MultiMedia10 Mixer TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="MultiMedia10 Mixer SLIM_7_TX" value="0" />
+ <ctl name="MultiMedia10 Mixer AFE_PCM_TX" value="0" />
+ <ctl name="DISPLAY_PORT Mixer MultiMedia1" value="0" />
+ <ctl name="DISPLAY_PORT Mixer MultiMedia2" value="0" />
+ <ctl name="DISPLAY_PORT Mixer MultiMedia3" value="0" />
+ <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="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia1" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia2" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia3" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia4" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia5" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia7" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia8" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia10" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia11" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia12" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia13" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia14" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia15" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia16" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia1" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia2" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia3" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia4" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia5" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia7" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia8" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia10" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia11" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia12" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia13" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia14" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia15" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 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="MultiMedia1 Mixer USB_AUDIO_TX" value="0" />
+ <ctl name="MultiMedia2 Mixer USB_AUDIO_TX" value="0" />
+ <ctl name="MultiMedia5 Mixer USB_AUDIO_TX" value="0" />
+ <ctl name="MultiMedia8 Mixer USB_AUDIO_TX" value="0" />
+ <ctl name="MultiMedia10 Mixer USB_AUDIO_TX" value="0" />
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="WSA_CDC_DMA_RX_0 Channels" value="One" />
+ <ctl name="RX_CDC_DMA_RX_0 Channels" value="One" />
+ <ctl name="VI_FEED_TX Channels" value="One" />
+ <ctl name="WSA_AIF_VI Mixer WSA_SPKR_VI_1" value="0" />
+ <ctl name="WSA_AIF_VI Mixer WSA_SPKR_VI_2" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Format" value="UNPACKED" />
+ <ctl name="WSA_CDC_DMA_TX_0 Format" value="UNPACKED" />
+ <ctl name="RX_CDC_DMA_RX_0 Format" value="UNPACKED" />
+ <ctl name="TX_CDC_DMA_TX_3 Format" value="UNPACKED" />
+ <!-- HFP start -->
+ <ctl name="HFP_SLIM7_UL_HL Switch" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Port Mixer SLIM_7_TX" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 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 MultiMedia2" 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="Tert MI2S LOOPBACK Volume" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0 Port Mixer TERT_MI2S_TX" value="0" />
+ <ctl name="WSA_CDC_DMA_RX_0_DL_HL Switch" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0 Port Mixer TERT_MI2S_TX" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0_DL_HL Switch" value="0" />
+ <ctl name="MultiMedia1 Mixer TERT_MI2S_TX" value="0" />
+ <ctl name="MultiMedia2 Mixer TERT_MI2S_TX" value="0" />
+ <!-- fm end -->
+
+ <!-- Multimode Voice1 -->
+ <ctl name="WSA_CDC_DMA_RX_0_Voice Mixer VoiceMMode1" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0_Voice Mixer VoiceMMode1" value="0" />
+ <ctl name="VoiceMMode1_Tx Mixer TX_CDC_DMA_TX_3_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" />
+ <!-- Multimode Voice1 Display-Port -->
+ <ctl name="DISPLAY_PORT_RX_Voice Mixer VoiceMMode1" value="0" />
+ <!-- Miltimode Voice1 end-->
+
+ <!-- Multimode Voice2 -->
+ <ctl name="WSA_CDC_DMA_RX_0_Voice Mixer VoiceMMode2" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0_Voice Mixer VoiceMMode2" value="0" />
+ <ctl name="VoiceMMode1_Tx Mixer TX_CDC_DMA_TX_3_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 Display-Port -->
+ <ctl name="DISPLAY_PORT_RX_Voice Mixer VoiceMMode2" 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" />
+ <ctl name="Incall_Music Audio Mixer MultiMedia9" value="0" />
+ <!-- Incall Music End -->
+
+ <!-- compress-voip-call start -->
+ <ctl name="WSA_CDC_DMA_RX_0_Voice Mixer Voip" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0_Voice Mixer Voip" value="0" />
+ <ctl name="Voip_Tx Mixer TX_CDC_DMA_TX_3_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 TX_CDC_DMA_TX_3" 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="WSA_CDC_DMA_RX_0_DL_HL Switch" value="0" />
+ <ctl name="RX_CDC_DMA_RX_0_DL_HL Switch" value="0" />
+ <!-- ADSP testfwk end-->
+
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia3" value="0" />
+
+ <!-- Codec controls -->
+ <!-- WSA controls -->
+ <ctl name="WSA RX0 MUX" value="ZERO" />
+ <ctl name="WSA RX1 MUX" value="ZERO" />
+ <ctl name="WSA_RX0 INP0" value="ZERO" />
+ <ctl name="WSA_RX1 INP0" value="ZERO" />
+ <ctl name="WSA_AIF_VI Mixer WSA_SPKR_VI_1" value="0" />
+ <ctl name="WSA_AIF_VI Mixer WSA_SPKR_VI_2" value="0" />
+ <ctl name="WSA_RX_0_VI_FB_LCH_MUX" value="ZERO" />
+ <ctl name="WSA_RX_0_VI_FB_RCH_MUX" value="ZERO" />
+ <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" />
+
+ <!-- RX Controls -->
+ <ctl name="RX_MACRO RX0 MUX" value="ZERO" />
+ <ctl name="RX_MACRO RX1 MUX" value="ZERO" />
+ <ctl name="RX_Native" value="OFF" />
+ <ctl name="RX_CDC_DMA_RX_0 Channels" value="One" />
+ <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_CDC_DMA_RX_0 Audio Mixer MultiMedia1" value="0" />
+ <ctl name="RX INT0 DEM MUX" value="NORMAL_DSM_OUT" />
+ <ctl name="RX INT1 DEM MUX" value="NORMAL_DSM_OUT" />
+ <ctl name="RX_COMP1 Switch" value="0" />
+ <ctl name="RX_COMP2 Switch" value="0" />
+ <ctl name="HPHL_COMP Switch" value="0" />
+ <ctl name="HPHR_COMP Switch" value="0" />
+ <ctl name="EAR_RDAC Switch" value="0" />
+ <ctl name="HPHL_RDAC Switch" value="0" />
+ <ctl name="HPHR_RDAC Switch" value="0" />
+ <ctl name="RDAC3_MUX" value="ZERO" />
+
+ <!-- TX Controls -->
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="MultiMedia1 Mixer TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="ADC2_MIXER Switch" value="0" />
+ <ctl name="ADC2 MUX" value="ZERO" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC2" value="0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC3" value="0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC4" value="0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC5" value="0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC6" value="0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC7" value="0" />
+ <ctl name="TX DEC0 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX0" value="ZERO" />
+ <ctl name="TX SMIC MUX0" value="ZERO" />
+ <ctl name="TX DEC1 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX1" value="ZERO" />
+ <ctl name="TX SMIC MUX1" value="ZERO" />
+ <ctl name="TX DEC2 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX2" value="ZERO" />
+ <ctl name="TX SMIC MUX2" value="ZERO" />
+ <ctl name="TX DEC3 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX3" value="ZERO" />
+ <ctl name="TX SMIC MUX3" value="ZERO" />
+ <ctl name="TX DEC4 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX4" value="ZERO" />
+ <ctl name="TX SMIC MUX4" value="ZERO" />
+ <ctl name="TX DEC5 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX5" value="ZERO" />
+ <ctl name="TX SMIC MUX5" value="ZERO" />
+ <ctl name="TX DEC6 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX6" value="ZERO" />
+ <ctl name="TX SMIC MUX6" value="ZERO" />
+ <ctl name="TX DEC7 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX7" value="ZERO" />
+ <ctl name="TX SMIC MUX7" value="ZERO" />
+
+ <!-- Volume controls -->
+ <ctl name="WSA_RX0 Digital Volume" value="84" />
+ <ctl name="WSA_RX1 Digital Volume" value="84" />
+ <ctl name="RX_RX0 Digital Volume" value="84" />
+ <ctl name="RX_RX1 Digital Volume" value="84" />
+ <ctl name="RX_RX2 Digital Volume" value="84" />
+ <ctl name="HPHL Volume" value="20" />
+ <ctl name="HPHR Volume" value="20" />
+ <ctl name="EAR SPKR PA Gain" value="G_DEFAULT" />
+
+ <ctl name="TX_DEC0 Volume" value="84" />
+ <ctl name="TX_DEC1 Volume" value="84" />
+ <ctl name="TX_DEC2 Volume" value="84" />
+ <ctl name="TX_DEC3 Volume" value="84" />
+ <ctl name="TX_DEC4 Volume" value="84" />
+ <ctl name="TX_DEC5 Volume" value="84" />
+ <ctl name="TX_DEC6 Volume" value="84" />
+ <ctl name="TX_DEC7 Volume" value="84" />
+
+ <ctl name="ADC1 Volume" value="12" />
+ <ctl name="ADC2 Volume" value="12" />
+ <ctl name="ADC3 Volume" value="12" />
+
+ <!-- Compander controls -->
+ <ctl name="WSA_COMP1 Switch" value="0" />
+ <ctl name="WSA_COMP2 Switch" value="0" />
+ <ctl name="COMP7 Switch" value="0" />
+ <ctl name="COMP8 Switch" value="0" />
+
+ <!-- Headphone Default mode - AB -->
+ <ctl name="RX HPH Mode" value="CLS_AB" />
+
+ <!-- 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" />
+ <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" />
+
+ <!-- vbat related data -->
+ <ctl name="GSM mode Enable" value="OFF" />
+ <ctl name="WSA_Softclip0 Enable" value="0" />
+ <ctl name="WSA_Softclip1 Enable" value="0" />
+ <ctl name="WSA_RX INT0 VBAT WSA RX0 VBAT Enable" value="0" />
+ <ctl name="WSA_RX INT1 VBAT WSA RX1 VBAT Enable" value="0" />
+
+ <!-- Codec controls end -->
+
+ <!-- defaults for mmap record -->
+ <ctl name="MultiMedia16 Mixer TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="MultiMedia16 Mixer SLIM_7_TX" value="0" />
+ <ctl name="MultiMedia16 Mixer TERT_MI2S_TX" value="0" />
+ <ctl name="MultiMedia16 Mixer USB_AUDIO_TX" 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="WSA_CDC_DMA_RX_0" />
+ </path>
+
+ <path name="echo-reference headphones">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="RX_CDC_DMA_RX_0" />
+ </path>
+
+ <path name="echo-reference display-port">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="DISPLAY_PORT" />
+ </path>
+
+ <path name="echo-reference headphones-44.1">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="RX_CDC_DMA_RX_0" />
+ </path>
+
+ <path name="deep-buffer-playback">
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia1" value="1" />
+ </path>
+
+ <path name="deep-buffer-playback handset">
+ <ctl name="RX_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 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="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="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia5" value="1" />
+ </path>
+
+ <path name="low-latency-playback handset">
+ <ctl name="RX_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 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="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="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia8" value="1" />
+ </path>
+
+ <path name="audio-ull-playback handset">
+ <ctl name="RX_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 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="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>
+
+ <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="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia4" value="1" />
+ </path>
+
+ <path name="compress-offload-playback handset">
+ <ctl name="RX_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia4" value="1" />
+ </path>
+
+ <path name="compress-offload-playback headphones-44.1">
+ <ctl name="RX_CDC_DMA_RX_0 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-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="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia7" value="1" />
+ </path>
+
+ <path name="compress-offload-playback2 handset">
+ <ctl name="RX_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia7" value="1" />
+ </path>
+
+ <path name="compress-offload-playback2 headphones-44.1">
+ <ctl name="RX_CDC_DMA_RX_0 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-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="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="compress-offload-playback3 handset">
+ <ctl name="RX_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="compress-offload-playback3 headphones-44.1">
+ <ctl name="RX_CDC_DMA_RX_0 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-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="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia11" value="1" />
+ </path>
+
+ <path name="compress-offload-playback4 handset">
+ <ctl name="RX_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia11" value="1" />
+ </path>
+
+ <path name="compress-offload-playback4 headphones-44.1">
+ <ctl name="RX_CDC_DMA_RX_0 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-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="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia12" value="1" />
+ </path>
+
+ <path name="compress-offload-playback5 handset">
+ <ctl name="RX_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia12" value="1" />
+ </path>
+
+ <path name="compress-offload-playback5 headphones-44.1">
+ <ctl name="RX_CDC_DMA_RX_0 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-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="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia13" value="1" />
+ </path>
+
+ <path name="compress-offload-playback6 handset">
+ <ctl name="RX_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia13" value="1" />
+ </path>
+
+ <path name="compress-offload-playback6 headphones-44.1">
+ <ctl name="RX_CDC_DMA_RX_0 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-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="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia14" value="1" />
+ </path>
+
+ <path name="compress-offload-playback7 handset">
+ <ctl name="RX_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia14" value="1" />
+ </path>
+
+ <path name="compress-offload-playback7 headphones-44.1">
+ <ctl name="RX_CDC_DMA_RX_0 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-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="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia15" value="1" />
+ </path>
+
+ <path name="compress-offload-playback8 handset">
+ <ctl name="RX_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia15" value="1" />
+ </path>
+
+ <path name="compress-offload-playback8 headphones-44.1">
+ <ctl name="RX_CDC_DMA_RX_0 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-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="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="compress-offload-playback9 handset">
+ <ctl name="RX_CDC_DMA_RX_0 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="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="compress-offload-playback9 headphones-44.1">
+ <ctl name="RX_CDC_DMA_RX_0 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="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 TX_CDC_DMA_TX_3" 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 TERT_MI2S_TX" value="1" />
+ </path>
+
+ <path name="audio-record-compress">
+ <ctl name="MultiMedia8 Mixer TX_CDC_DMA_TX_3" 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 TX_CDC_DMA_TX_3" 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 TERT_MI2S_TX" value="1" />
+ </path>
+
+ <path name="fm-virtual-record capture-fm">
+ <ctl name="MultiMedia2 Mixer TERT_MI2S_TX" value="1" />
+ </path>
+
+ <path name="play-fm">
+ <ctl name="Tert MI2S LOOPBACK Volume" value="1" />
+ <ctl name="WSA_CDC_DMA_RX_0 Port Mixer TERT_MI2S_TX" value="1" />
+ <ctl name="WSA_CDC_DMA_RX_0_DL_HL Switch" value="1" />
+ </path>
+
+ <path name="play-fm headphones">
+ <ctl name="Tert MI2S LOOPBACK Volume" value="1" />
+ <ctl name="RX_CDC_DMA_RX_0 Port Mixer TERT_MI2S_TX" value="1" />
+ <ctl name="RX_CDC_DMA_RX_0_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">
+ </path>
+
+ <path name="hfp-sco headphones">
+ </path>
+
+ <path name="hfp-sco-wb">
+ <path name="hfp-sco" />
+ </path>
+
+ <path name="hfp-sco-wb headphones">
+ <path name="hfp-sco headphones" />
+ </path>
+
+ <path name="compress-voip-call">
+ <ctl name="WSA_CDC_DMA_RX_0_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer TX_CDC_DMA_TX_3_Voip" value="1" />
+ </path>
+
+ <path name="compress-voip-call handset">
+ <ctl name="RX_CDC_DMA_RX_0_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer TX_CDC_DMA_TX_3_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 TX_CDC_DMA_TX_3_Voip" value="1" />
+ </path>
+
+ <path name="compress-voip-call headphones">
+ <ctl name="RX_CDC_DMA_RX_0_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer TX_CDC_DMA_TX_3_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 TX_CDC_DMA_TX_3_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="WSA_CDC_DMA_RX_0_Voice Mixer VoiceMMode1" value="1" />
+ <ctl name="VoiceMMode1_Tx Mixer TX_CDC_DMA_TX_3_MMode1" value="1" />
+ </path>
+
+ <path name="voicemmode1-call handset">
+ <ctl name="RX_CDC_DMA_RX_0_Voice Mixer VoiceMMode1" value="1" />
+ <ctl name="VoiceMMode1_Tx Mixer TX_CDC_DMA_TX_3_MMode1" value="1" />
+ </path>
+
+ <path name="voicemmode1-call headphones">
+ <ctl name="RX_CDC_DMA_RX_0_Voice Mixer VoiceMMode1" value="1" />
+ <ctl name="VoiceMMode1_Tx Mixer TX_CDC_DMA_TX_3_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 TX_CDC_DMA_TX_3_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 display-port-and-usb-headset-mic">
+ <ctl name="DISPLAY_PORT_RX_Voice Mixer VoiceMMode1" value="1" />
+ <ctl name="VoiceMMode1_Tx Mixer USB_AUDIO_TX_MMode1" value="1" />
+ </path>
+
+ <path name="voicemmode1-call display-port">
+ <ctl name="DISPLAY_PORT_RX_Voice Mixer VoiceMMode1" value="1" />
+ <ctl name="VoiceMMode1_Tx Mixer TX_CDC_DMA_TX_3_MMode1" value="1" />
+ </path>
+
+ <path name="voicemmode2-call">
+ <ctl name="WSA_CDC_DMA_RX_0_Voice Mixer VoiceMMode2" value="1" />
+ <ctl name="VoiceMMode2_Tx Mixer TX_CDC_DMA_TX_3_MMode2" value="1" />
+ </path>
+
+ <path name="voicemmode2-call handset">
+ <ctl name="RX_CDC_DMA_RX_0_Voice Mixer VoiceMMode2" value="1" />
+ <ctl name="VoiceMMode2_Tx Mixer TX_CDC_DMA_TX_3_MMode2" value="1" />
+ </path>
+
+ <path name="voicemmode2-call headphones">
+ <ctl name="RX_CDC_DMA_RX_0_Voice Mixer VoiceMMode2" value="1" />
+ <ctl name="VoiceMMode2_Tx Mixer TX_CDC_DMA_TX_3_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 TX_CDC_DMA_TX_3_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 display-port-and-usb-headset-mic">
+ <ctl name="DISPLAY_PORT_RX_Voice Mixer VoiceMMode2" value="1" />
+ <ctl name="VoiceMMode2_Tx Mixer USB_AUDIO_TX_MMode2" value="1" />
+ </path>
+
+ <path name="voicemmode2-call display-port">
+ <ctl name="DISPLAY_PORT_RX_Voice Mixer VoiceMMode2" value="1" />
+ <ctl name="VoiceMMode2_Tx Mixer TX_CDC_DMA_TX_3_MMode2" value="1" />
+ </path>
+
+ <!-- VoIP Rx settings -->
+ <path name="audio-playback-voip">
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip handset">
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip headphones">
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip bt-sco">
+ <ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="audio-playback-voip bt-sco" />
+ </path>
+
+ <path name="audio-playback-voip afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia10" value="1" />
+ </path>
+
+ <path name="audio-playback-voip speaker-and-display-port">
+ <path name="audio-playback-voip display-port" />
+ <path name="audio-playback-voip" />
+ </path>
+
+ <!-- VoIP Tx settings -->
+ <path name="audio-record-voip">
+ <ctl name="MultiMedia10 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="audio-record-voip usb-headset-mic">
+ <ctl name="MultiMedia10 Mixer USB_AUDIO_TX" value="1" />
+ </path>
+
+ <path name="audio-record-voip bt-sco">
+ <ctl name="MultiMedia10 Mixer SLIM_7_TX" value="1" />
+ </path>
+
+ <path name="audio-record-voip bt-sco-wb">
+ <ctl name="BT SampleRate" value="KHZ_16" />
+ <path name="audio-record-voip bt-sco" />
+ </path>
+
+ <path name="bt-a2dp">
+ <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>
+
+ <path name="mmap-playback">
+ <ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback handset">
+ <ctl name="RX_CDC_DMA_RX_0 Audio Mixer MultiMedia16" value="1" />
+ </path>
+
+ <path name="mmap-playback headphones">
+ <ctl name="RX_CDC_DMA_RX_0 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 TX_CDC_DMA_TX_3" 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 TERT_MI2S_TX" value="1" />
+ </path>
+
+ <path name="mmap-record usb-headset-mic">
+ <ctl name="MultiMedia16 Mixer USB_AUDIO_TX" value="1" />
+ </path>
+
+ <path name="hifi-playback display-port">
+ <ctl name="DISPLAY_PORT Mixer MultiMedia2" value="1" />
+ </path>
+
+ <path name="hifi-playback afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia2" value="1" />
+ </path>
+
+ <path name="hifi-playback usb-headset">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia2" value="1" />
+ </path>
+
+ <path name="hifi-playback usb-headphones">
+ <ctl name="USB_AUDIO_RX Audio Mixer MultiMedia2" value="1" />
+ </path>
+
+ <path name="hifi-record usb-headset-mic">
+ <ctl name="MultiMedia2 Mixer USB_AUDIO_TX" value="1" />
+ </path>
+
+ <path name="incall_music_uplink">
+ <ctl name="Incall_Music Audio Mixer MultiMedia9" value="1" />
+ </path>
+
+ <path name="incall_music_uplink speaker">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink handset">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink handset-hac">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink display-port">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink bt-sco">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink bt-sco-wb">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink speaker-and-display-port">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink afe-proxy">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink usb-headphones">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink usb-headset">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink speaker-and-usb-headphones">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink headphones">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink speaker-and-headphones">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink speaker-and-bt-sco">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink voice-tty-hco-handset">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink speaker-and-bt-a2dp">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="incall_music_uplink bt-a2dp">
+ <path name="incall_music_uplink" />
+ </path>
+ <path name="incall_music_uplink afe-proxy">
+ <path name="incall_music_uplink" />
+ </path>
+
+ <path name="spkr-rx-calib">
+ <ctl name="WSA_CDC_DMA_RX_0_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="TX DEC0 MUX" value="SWR_MIC" />
+ <ctl name="TX SMIC MUX0" value="ADC0" />
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="ADC1_MIXER Switch" value="1" />
+ </path>
+
+ <path name="amic2">
+ <ctl name="TX DEC0 MUX" value="SWR_MIC" />
+ <ctl name="TX SMIC MUX0" value="ADC2" />
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="ADC2_MIXER Switch" value="1" />
+ <ctl name="ADC2 MUX" value="INP2" />
+ </path>
+
+
+ <path name="amic3">
+ <ctl name="TX DEC0 MUX" value="SWR_MIC" />
+ <ctl name="TX SMIC MUX0" value="ADC2" />
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="ADC2_MIXER Switch" value="1" />
+ <ctl name="ADC2 MUX" value="INP3" />
+ </path>
+
+ <path name="dmic1">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC0" />
+ </path>
+
+ <path name="dmic2">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC1" />
+ </path>
+
+ <path name="dmic3">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC2" />
+ </path>
+
+ <path name="dmic4">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC3" />
+ </path>
+
+ <path name="dmic5">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC4" />
+ </path>
+
+ <path name="dmic6">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC5" />
+ </path>
+
+ <path name="speaker">
+ <ctl name="WSA_CDC_DMA_RX_0 Channels" value="One" />
+ <ctl name="WSA RX0 MUX" value="AIF1_PB" />
+ <ctl name="WSA_RX0 INP0" value="RX0" />
+ <ctl name="WSA_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" />
+ </path>
+
+ <path name="speaker-mono">
+ <ctl name="WSA_CDC_DMA_RX_0 Channels" value="One" />
+ <ctl name="WSA RX0 MUX" value="AIF1_PB" />
+ <ctl name="WSA_RX0 INP0" value="RX0" />
+ <ctl name="WSA_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" />
+ </path>
+
+ <path name="speaker-mono-2">
+ <path name="speaker-mono" />
+ </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="40" />
+ <ctl name="IIR0 INP0 MUX" value="DEC0" />
+ <ctl name="RX INT0 MIX2 INP" value="SRC0" />
+ <ctl name="RX INT1 MIX2 INP" value="SRC0" />
+ </path>
+
+ <path name="sidetone-handset">
+ <path name="sidetone-iir" />
+ <ctl name="IIR0 INP0 Volume" value="54" />
+ <ctl name="IIR0 INP0 MUX" value="DEC0" />
+ <ctl name="RX INT0 MIX2 INP" value="SRC0" />
+ </path>
+
+ <path name="afe-sidetone">
+ <ctl name="Voice Sidetone Enable" value="1" />
+ </path>
+
+ <path name="speaker-mic">
+ <path name="amic3" />
+ </path>
+
+ <path name="speaker-protected">
+ <ctl name="WSA_AIF_VI Mixer WSA_SPKR_VI_1" value="1" />
+ <ctl name="WSA_CDC_DMA_0 TX Format" value="PACKED_16B" />
+ <path name="speaker" />
+ <ctl name="VI_FEED_TX Channels" value="One" />
+ <ctl name="WSA_RX_0_VI_FB_LCH_MUX" value="WSA_CDC_DMA_TX_0" />
+ </path>
+
+ <path name="voice-speaker-protected">
+ <ctl name="WSA_AIF_VI Mixer WSA_SPKR_VI_1" value="1" />
+ <ctl name="WSA_CDC_DMA_0 TX Format" value="PACKED_16B" />
+ <path name="speaker-mono" />
+ <ctl name="VI_FEED_TX Channels" value="One" />
+ <ctl name="WSA_RX_0_VI_FB_LCH_MUX" value="WSA_CDC_DMA_TX_0" />
+ </path>
+
+ <path name="voice-speaker-2-protected">
+ <path name="voice-speaker-protected" />
+ </path>
+
+ <path name="voice-speaker-stereo-protected">
+ <path name="speaker-protected" />
+ </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="RX_MACRO RX0 MUX" value="AIF1_PB" />
+ <ctl name="RX_CDC_DMA_RX_0 Channels" value="One" />
+ <ctl name="RX INT0_1 MIX1 INP0" value="RX0" />
+ <ctl name="RX INT0 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="EAR_RDAC Switch" value="1" />
+ <ctl name="RDAC3_MUX" value="RX1" />
+ </path>
+
+ <path name="handset-mic">
+ <path name="amic1" />
+ </path>
+
+ <path name="headphones">
+ <ctl name="RX_MACRO RX0 MUX" value="AIF1_PB" />
+ <ctl name="RX_MACRO RX1 MUX" value="AIF1_PB" />
+ <ctl name="RX_CDC_DMA_RX_0 Channels" value="Two" />
+ <ctl name="RX INT0_1 MIX1 INP0" value="RX0" />
+ <ctl name="RX INT1_1 MIX1 INP0" value="RX1" />
+ <ctl name="RX INT0 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX INT1 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX_COMP1 Switch" value="1" />
+ <ctl name="RX_COMP2 Switch" value="1" />
+ <ctl name="HPHL_COMP Switch" value="1" />
+ <ctl name="HPHR_COMP Switch" value="1" />
+ <ctl name="HPHL_RDAC Switch" value="1" />
+ <ctl name="HPHR_RDAC Switch" value="1" />
+ </path>
+
+ <path name="headphones-44.1">
+ <ctl name="RX_Native" value="ON" />
+ <path name="headphones" />
+ </path>
+
+ <path name="hph-highquality-mode">
+ </path>
+
+ <path name="hph-lowpower-mode">
+ </path>
+
+ <path name="true-native-mode">
+ </path>
+
+ <path name="line">
+ <path name="headphones" />
+ </path>
+
+ <path name="headset-mic">
+ <path name="amic2" />
+ </path>
+
+ <path name="voice-handset">
+ <path name="handset" />
+ </path>
+
+ <path name="voice-speaker">
+ <path name="speaker-mono" />
+ </path>
+
+ <path name="voice-speaker-stereo">
+ <path name="speaker" />
+ </path>
+
+ <path name="voice-speaker-2">
+ <path name="speaker-mono-2" />
+ </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="usb-headphones">
+ </path>
+
+ <path name="usb-headset">
+ </path>
+
+ <path name="afe-proxy">
+ </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>
+
+ <!-- Dual MIC devices -->
+ <path name="handset-dmic-endfire">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="Two" />
+ <ctl name="TX DEC0 MUX" value="SWR_MIC" />
+ <ctl name="TX SMIC MUX0" value="ADC0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="ADC1_MIXER Switch" value="1" />
+ <ctl name="TX DEC1 MUX" value="SWR_MIC" />
+ <ctl name="TX SMIC MUX1" value="ADC2" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="ADC2_MIXER Switch" value="1" />
+ <ctl name="ADC2 MUX" value="INP3" />
+ </path>
+
+ <path name="speaker-dmic-endfire">
+ <path name="handset-dmic-endfire" />
+ </path>
+
+ <path name="dmic-endfire">
+ <path name="handset-dmic-endfire" />
+ <ctl name="IIR0 INP0 MUX" value="DEC0" />
+ </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="speaker-dmic-broadside">
+ <path name="speaker-dmic-endfire" />
+ </path>
+
+ <path name="dmic-broadside">
+ <path name="speaker-dmic-broadside" />
+ <ctl name="IIR0 INP0 MUX" value="DEC0" />
+ </path>
+
+ <path name="voice-speaker-dmic-broadside">
+ <path name="dmic-broadside" />
+ </path>
+
+ <!-- TTY devices -->
+
+ <path name="tty-headphones">
+ <ctl name="RX_MACRO RX0 MUX" value="AIF1_PB" />
+ <ctl name="RX INT0_1 MIX1 INP0" value="RX0" />
+ <ctl name="RX INT0 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX_COMP1 Switch" value="1" />
+ <ctl name="HPHL_RDAC Switch" value="1" />
+ </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-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="amic3" />
+ </path>
+
+ <path name="unprocessed-handset-mic">
+ <path name="handset-mic" />
+ </path>
+
+ <path name="unprocessed-mic">
+ <path name="unprocessed-handset-mic" />
+ </path>
+
+ <path name="unprocessed-stereo-mic">
+ <path name="voice-rec-dmic-ef" />
+ </path>
+
+ <path name="unprocessed-three-mic">
+ <path name="three-mic" />
+ </path>
+
+ <path name="unprocessed-quad-mic">
+ <path name="quad-mic" />
+ </path>
+
+ <path name="unprocessed-headset-mic">
+ <path name="headset-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="WSA_CDC_DMA_RX_0_DL_HL Switch" value="1" />
+ </path>
+
+</mixer>
diff --git a/configs/kona/sound_trigger_mixer_paths.xml b/configs/kona/sound_trigger_mixer_paths.xml
new file mode 100644
index 0000000..a0c0320
--- /dev/null
+++ b/configs/kona/sound_trigger_mixer_paths.xml
@@ -0,0 +1,237 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--- Copyright (c) 2014-2018, 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 TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="LSM2 Mixer TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="LSM3 Mixer TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="LSM4 Mixer TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="LSM5 Mixer TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="LSM6 Mixer TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="LSM7 Mixer TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="LSM8 Mixer TX_CDC_DMA_TX_3" 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="TX_CDC_DMA_TX_3 LSM Function" value="None" />
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC2" value="0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC3" value="0" />
+ <ctl name="TX DEC0 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX0" value="ZERO" />
+ <ctl name="TX DEC1 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX1" value="ZERO" />
+ <ctl name="TX DEC2 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX2" value="ZERO" />
+ <ctl name="TX DEC3 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX3" value="ZERO" />
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="None"/>
+ <ctl name="EC Reference Channels" value="Zero"/>
+ <ctl name="EC Reference Bit Format" value="0"/>
+ <ctl name="EC Reference SampleRate" value="0"/>
+ <ctl name="TX_DEC0 Volume" value="84" />
+ <ctl name="TX_DEC1 Volume" value="84" />
+ <ctl name="TX_DEC2 Volume" value="84" />
+ <ctl name="TX_DEC3 Volume" value="84" />
+
+ <path name="listen-voice-wakeup-1">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM1 Port" value="TX_CDC_DMA_TX_3" />
+ <ctl name="LSM1 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-2">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM2 Port" value="TX_CDC_DMA_TX_3" />
+ <ctl name="LSM2 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-3">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM3 Port" value="TX_CDC_DMA_TX_3" />
+ <ctl name="LSM3 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-4">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM4 Port" value="TX_CDC_DMA_TX_3" />
+ <ctl name="LSM4 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-5">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM5 Port" value="TX_CDC_DMA_TX_3" />
+ <ctl name="LSM5 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-6">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM6 Port" value="TX_CDC_DMA_TX_3" />
+ <ctl name="LSM6 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-7">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM7 Port" value="TX_CDC_DMA_TX_3" />
+ <ctl name="LSM7 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-8">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM8 Port" value="TX_CDC_DMA_TX_3" />
+ <ctl name="LSM8 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-1 preproc">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM1 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM1 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-2 preproc">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM2 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM2 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-3 preproc">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM3 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM3 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-4 preproc">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM4 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM4 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-5 preproc">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM5 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM5 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-6 preproc">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM6 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM6 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-7 preproc">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM7 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM7 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-8 preproc">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM8 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM8 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-ape-handset-mic">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX_DEC0 Volume" value="102" />
+ <ctl name="TX DMIC MUX0" value="DMIC2" />
+ </path>
+
+ <path name="listen-ape-handset-mic-preproc">
+ <path name="listen-ape-handset-mic"/>
+ </path>
+
+ <path name="listen-ape-handset-dmic">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="Two" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX_DEC0 Volume" value="102" />
+ <ctl name="TX_DEC1 Volume" value="102" />
+ <ctl name="TX DMIC MUX0" value="DMIC2" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="TX DMIC MUX1" value="DMIC3" />
+ </path>
+
+ <path name="listen-ape-handset-tmic">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="Three" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX_DEC0 Volume" value="102" />
+ <ctl name="TX_DEC1 Volume" value="102" />
+ <ctl name="TX_DEC2 Volume" value="102" />
+ <ctl name="TX DMIC MUX0" value="DMIC2" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="TX DMIC MUX1" value="DMIC0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
+ <ctl name="TX DMIC MUX2" value="DMIC3" />
+ </path>
+
+ <path name="listen-ape-handset-qmic">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="Four" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX_DEC0 Volume" value="102" />
+ <ctl name="TX_DEC1 Volume" value="102" />
+ <ctl name="TX_DEC2 Volume" value="102" />
+ <ctl name="TX_DEC3 Volume" value="102" />
+ <ctl name="TX DMIC MUX0" value="DMIC2" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="TX DMIC MUX1" value="DMIC1" />
+ <ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
+ <ctl name="TX DMIC MUX2" value="DMIC3" />
+ <ctl name="TX_AIF1_CAP Mixer DEC3" value="1" />
+ <ctl name="TX DMIC MUX3" value="DMIC0" />
+ </path>
+
+ <path name="echo-reference">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="WSA_CDC_DMA_RX_0"/>
+ <ctl name="EC Reference Channels" value="Two"/>
+ <ctl name="EC Reference Bit Format" value="S16_LE"/>
+ <ctl name="EC Reference SampleRate" value="48000"/>
+ </path>
+
+ <path name="echo-reference headset">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="WSA_CDC_DMA_RX_0"/>
+ <ctl name="EC Reference Channels" value="One"/>
+ <ctl name="EC Reference Bit Format" value="S16_LE"/>
+ <ctl name="EC Reference SampleRate" value="48000"/>
+ </path>
+
+ <path name="echo-reference a2dp">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_7_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/kona/sound_trigger_mixer_paths_qrd.xml b/configs/kona/sound_trigger_mixer_paths_qrd.xml
new file mode 100644
index 0000000..fc1abde
--- /dev/null
+++ b/configs/kona/sound_trigger_mixer_paths_qrd.xml
@@ -0,0 +1,235 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--- Copyright (c) 2014-2018, 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 TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="LSM2 Mixer TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="LSM3 Mixer TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="LSM4 Mixer TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="LSM5 Mixer TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="LSM6 Mixer TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="LSM7 Mixer TX_CDC_DMA_TX_3" value="0" />
+ <ctl name="LSM8 Mixer TX_CDC_DMA_TX_3" 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="TX_CDC_DMA_TX_3 LSM Function" value="None" />
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC2" value="0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC3" value="0" />
+ <ctl name="TX DEC0 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX0" value="ZERO" />
+ <ctl name="TX SMIC MUX0" value="ZERO" />
+ <ctl name="TX DEC1 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX1" value="ZERO" />
+ <ctl name="TX SMIC MUX1" value="ZERO" />
+ <ctl name="TX DEC2 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX2" value="ZERO" />
+ <ctl name="TX DEC3 MUX" value="MSM_DMIC" />
+ <ctl name="TX DMIC MUX3" value="ZERO" />
+ <ctl name="ADC1_MIXER Switch" value="0" />
+ <ctl name="ADC2_MIXER Switch" value="0" />
+ <ctl name="ADC2 MUX" value="ZERO" />
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="None"/>
+ <ctl name="EC Reference Channels" value="Zero"/>
+ <ctl name="EC Reference Bit Format" value="0"/>
+ <ctl name="EC Reference SampleRate" value="0"/>
+
+ <path name="listen-voice-wakeup-1">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM1 Port" value="TX_CDC_DMA_TX_3" />
+ <ctl name="LSM1 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-2">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM2 Port" value="TX_CDC_DMA_TX_3" />
+ <ctl name="LSM2 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-3">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM3 Port" value="TX_CDC_DMA_TX_3" />
+ <ctl name="LSM3 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-4">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM4 Port" value="TX_CDC_DMA_TX_3" />
+ <ctl name="LSM4 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-5">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM5 Port" value="TX_CDC_DMA_TX_3" />
+ <ctl name="LSM5 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-6">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM6 Port" value="TX_CDC_DMA_TX_3" />
+ <ctl name="LSM6 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-7">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM7 Port" value="TX_CDC_DMA_TX_3" />
+ <ctl name="LSM7 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-8">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM8 Port" value="TX_CDC_DMA_TX_3" />
+ <ctl name="LSM8 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-1 preproc">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM1 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM1 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-2 preproc">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM2 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM2 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-3 preproc">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM3 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM3 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-4 preproc">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM4 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM4 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-5 preproc">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM5 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM5 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-6 preproc">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM6 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM6 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-7 preproc">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM7 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM7 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-voice-wakeup-8 preproc">
+ <ctl name="TX_CDC_DMA_TX_3 LSM Function" value="SWAUDIO" />
+ <ctl name="LSM8 Port" value="ADM_LSM_TX" />
+ <ctl name="LSM8 Mixer TX_CDC_DMA_TX_3" value="1" />
+ </path>
+
+ <path name="listen-ape-handset-mic">
+ <ctl name="TX DEC0 MUX" value="SWR_MIC" />
+ <ctl name="TX SMIC MUX0" value="ADC0" />
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="ADC1_MIXER Switch" value="1" />
+ </path>
+
+ <path name="listen-ape-handset-mic-preproc">
+ <path name="listen-ape-handset-mic"/>
+ </path>
+
+ <path name="listen-ape-handset-dmic">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="Two" />
+ <ctl name="TX DEC0 MUX" value="SWR_MIC" />
+ <ctl name="TX SMIC MUX0" value="ADC0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="ADC1_MIXER Switch" value="1" />
+ <ctl name="TX DEC1 MUX" value="SWR_MIC" />
+ <ctl name="TX SMIC MUX1" value="ADC2" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="ADC2_MIXER Switch" value="1" />
+ <ctl name="ADC2 MUX" value="INP3" />
+ </path>
+
+ <path name="listen-ape-handset-tmic">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="Three" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC2" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="TX DMIC MUX1" value="DMIC0" />
+ <ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
+ <ctl name="TX DMIC MUX2" value="DMIC3" />
+ </path>
+
+ <path name="listen-ape-handset-qmic">
+ <ctl name="TX_CDC_DMA_TX_3 Channels" value="Four" />
+ <ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="TX DMIC MUX0" value="DMIC2" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="TX DMIC MUX1" value="DMIC1" />
+ <ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
+ <ctl name="TX DMIC MUX2" value="DMIC3" />
+ <ctl name="TX_AIF1_CAP Mixer DEC3" value="1" />
+ <ctl name="TX DMIC MUX3" value="DMIC0" />
+ </path>
+
+ <path name="echo-reference">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="WSA_CDC_DMA_RX_0"/>
+ <ctl name="EC Reference Channels" value="Two"/>
+ <ctl name="EC Reference Bit Format" value="S16_LE"/>
+ <ctl name="EC Reference SampleRate" value="48000"/>
+ </path>
+
+ <path name="echo-reference headset">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="WSA_CDC_DMA_RX_0"/>
+ <ctl name="EC Reference Channels" value="One"/>
+ <ctl name="EC Reference Bit Format" value="S16_LE"/>
+ <ctl name="EC Reference SampleRate" value="48000"/>
+ </path>
+
+ <path name="echo-reference a2dp">
+ <ctl name="AUDIO_REF_EC_UL1 MUX" value="SLIM_7_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/kona/sound_trigger_platform_info.xml b/configs/kona/sound_trigger_platform_info.xml
new file mode 100644
index 0000000..fa9f2d6
--- /dev/null
+++ b/configs/kona/sound_trigger_platform_info.xml
@@ -0,0 +1,271 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--- Copyright (c) 2013-2018, 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="0x0105" /> <!-- this must be the first param -->
+<!--- Version History: -->
+<!--- 0x0101: Legacy version. -->
+<!--- 0x0102: Includes acdb_ids param with the gcs_usecase tag. This matches -->
+<!--- the gcs_usecase with the acdb device that uses it. -->
+<!--- 0x0103: app_type and in_channels added to <lsm usecase> and out_channels -->
+<!--- added to <adm_config> -->
+<!--- 0x0104: instance id support for both WDSP<CPE> and ADSP lsm usecases -->
+<!--- 0x0105: Select <lsm_usecase> based on capture device -->
+
+ <common_config>
+ <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" />
+ <param transit_to_adsp_on_battery_charging="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="TX_CDC_DMA_TX_3" />
+ <!-- Param used to match and obtain device backend index -->
+ <param backend_dai_name="TX_CDC_DMA_TX_3" />
+ <!-- Param used to indicate if SVA has dedicated SLIM ports -->
+ <param dedicated_sva_path="true" />
+ </common_config>
+ <acdb_ids>
+ <param DEVICE_HANDSET_MIC_APE="100" />
+ <param DEVICE_HANDSET_TMIC_APE="157" />
+ <param DEVICE_HANDSET_MIC_PP_APE="135" />
+ <param DEVICE_HANDSET_QMIC_APE="137" />
+ <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. -->
+
+ <!-- QTI SVA -->
+ <sound_model_config>
+ <param vendor_uuid="68ab2d40-e860-11e3-95ef-0002a5d5c51b" />
+ <param execution_type="ADSP" /> <!-- value: "ADSP" "DYNAMIC" -->
+ <param library="libsmwrapper.so" />
+ <param max_ape_phrases="20" />
+ <param max_ape_users="10" />
+ <!-- Profile specific data which the algorithm can support -->
+ <param sample_rate="16000" />
+ <param bit_width="16" />
+ <param out_channels="1"/> <!-- Module output channels -->
+
+ <arm_ss_usecase>
+ <!-- Options are "KEYWORD_DETECTION", "USER_VERIFICATION", "CUSTOM_DETECTION" -->
+ <param sm_detection_type= "KEYWORD_DETECTION" />
+ <param sm_id="0x2" />
+ <param module_lib="libcapiv2svacnn.so"/>
+ <param sample_rate="16000"/>
+ <param bit_wdith="16"/>
+ <param channel_count="1"/>
+ </arm_ss_usecase>
+ <arm_ss_usecase>
+ <param sm_detection_type= "USER_VERIFICATION" />
+ <param sm_id="0x4" />
+ <param module_lib="libcapiv2vop.so"/>
+ <param sample_rate="16000"/>
+ <param bit_wdith="16"/>
+ <param channel_count="1"/>
+ </arm_ss_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 capture_device="HANDSET" />
+ <!-- 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="FFECNS" />
+ <!-- fluence_type: "FLUENCE_MIC", "FLUENCE_DMIC", "FLUENCE_TMIC" -->
+ <!-- "FLUENCE_QMIC". Param value is valid when adm_cfg_profile -->
+ <!-- is FFECNS -->
+ <param fluence_type="FLUENCE_TMIC" />
+ <param execution_mode="ADSP" />
+ <param app_type="2" /> <!-- app type used in ACDB -->
+ <param in_channels="5"/> <!-- Module input channels -->
+ <param load_sound_model_ids="0x00012C1C, 0x0, 0x00012C14" />
+ <param unload_sound_model_ids="0x00012C1C, 0x0, 0x00012C15" />
+ <param confidence_levels_ids="0x00012C1C, 0x0, 0x00012C07" />
+ <param operation_mode_ids="0x00012C1C, 0x0, 0x00012C02" />
+ <param polling_enable_ids="0x00012C1C, 0x0, 0x00012C1B" />
+ <param custom_config_ids="0x00012C1C, 0x0, 0x00012C20" />
+ <param det_event_type_ids="0x00012C1C, 0x0, 0x00012C2C" />
+ </lsm_usecase>
+ <lsm_usecase>
+ <param capture_device="HEADSET" />
+ <param adm_cfg_profile="FFECNS" />
+ <param fluence_type="FLUENCE_MIC" />
+ <param execution_mode="ADSP" />
+ <param app_type="2" /> <!-- app type used in ACDB -->
+ <param in_channels="1"/> <!-- Module input channels -->
+ <param load_sound_model_ids="0x00012C1C, 0x0, 0x00012C14" />
+ <param unload_sound_model_ids="0x00012C1C, 0x0, 0x00012C15" />
+ <param confidence_levels_ids="0x00012C1C, 0x0, 0x00012C07" />
+ <param operation_mode_ids="0x00012C1C, 0x0, 0x00012C02" />
+ <param polling_enable_ids="0x00012C1C, 0x0, 0x00012C1B" />
+ <param custom_config_ids="0x00012C1C, 0x0, 0x00012C20" />
+ <param det_event_type_ids="0x00012C1C, 0x0, 0x00012C2C" />
+ </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>
+
+ <!-- QTI Music Detection !-->
+ <sound_model_config>
+ <param vendor_uuid="876c1b46-9d4d-40cc-a4fd-4d5ec7a80e47" />
+ <param execution_type="ADSP" /> <!-- value: "ADSP" "DYNAMIC" -->
+ <param library="libsmwrapper.so" />
+ <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 out_channels="1"/> <!-- Module output channels -->
+ <!-- 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: only "ADSP" -->
+ <lsm_usecase>
+ <param capture_device="HANDSET" />
+ <!-- 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_MIC", "FLUENCE_DMIC", "FLUENCE_TMIC" -->
+ <!-- "FLUENCE_QMIC". Param value is valid when adm_cfg_profile -->
+ <!-- is FFECNS -->
+ <param fluence_type="NONE" />
+ <param execution_mode="ADSP" />
+ <param app_type="4" /> <!-- app type for MD used in ACDB -->
+ <param in_channels="1"/> <!-- Module input channels -->
+ <param load_sound_model_ids="0x00012C22, 0x0, 0x00012C14" />
+ <param unload_sound_model_ids="0x00012C22, 0x0, 0x00012C15" />
+ <param confidence_levels_ids="0x00012C22, 0x0, 0x00012C07" />
+ <param det_event_type_ids="0x00012C22, 0x0, 0x00012C2C" />
+ <param custom_config_ids="0x00012C22, 0x0, 0x00012C30" />
+ </lsm_usecase>
+ <lsm_usecase>
+ <param capture_device="HEADSET" />
+ <param adm_cfg_profile="NONE" />
+ <param fluence_type="NONE" />
+ <param execution_mode="ADSP" />
+ <param app_type="4" /> <!-- app type for MD used in ACDB -->
+ <param in_channels="1"/> <!-- Module input channels -->
+ <param load_sound_model_ids="0x00012C22, 0x0, 0x00012C14" />
+ <param unload_sound_model_ids="0x00012C22, 0x0, 0x00012C15" />
+ <param confidence_levels_ids="0x00012C22, 0x0, 0x00012C07" />
+ <param det_event_type_ids="0x00012C22, 0x0, 0x00012C2C" />
+ <param custom_config_ids="0x00012C22, 0x0, 0x00012C30" />
+ </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, FTRT, 1500" />
+ <param client_capture_read_delay="2000" />
+ </sound_model_config>
+
+ <!-- Google Hotword -->
+ <sound_model_config>
+ <param vendor_uuid="7038ddc8-30f2-11e6-b0ac-40a8f03d3f15" />
+ <param execution_type="ADSP" /> <!-- value: "WDSP" "ADSP" "DYNAMIC" -->
+ <param library="none" />
+ <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 out_channels="1"/> <!-- Module output channels -->
+ <lsm_usecase>
+ <param capture_device="HANDSET" />
+ <!-- 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_MIC", "FLUENCE_DMIC", "FLUENCE_TMIC" -->
+ <!-- "FLUENCE_QMIC". Param value is valid when adm_cfg_profile -->
+ <!-- is FFECNS -->
+ <param fluence_type="NONE" />
+ <param execution_mode="ADSP" />
+ <param app_type="3" /> <!-- app type used in ACDB -->
+ <param in_channels="1"/> <!-- Module input channels -->
+ <param load_sound_model_ids="0x18000001, 0x0, 0x00012C14" />
+ <param unload_sound_model_ids="0x18000001, 0x0, 0x00012C15" />
+ <param confidence_levels_ids="0x18000001, 0x0, 0x00012C07" />
+ <param operation_mode_ids="0x18000001, 0x0, 0x00012C02" />
+ <param polling_enable_ids="0x18000001, 0x0, 0x00012C1B" />
+ <param custom_config_ids="0x18000001, 0x0, 0x00012C20" />
+ </lsm_usecase>
+ <lsm_usecase>
+ <param capture_device="HEADSET" />
+ <param adm_cfg_profile="NONE" />
+ <param fluence_type="NONE" />
+ <param execution_mode="ADSP" />
+ <param app_type="3" /> <!-- app type used in ACDB -->
+ <param in_channels="1"/> <!-- Module input channels -->
+ <param load_sound_model_ids="0x18000001, 0x0, 0x00012C14" />
+ <param unload_sound_model_ids="0x18000001, 0x0, 0x00012C15" />
+ <param confidence_levels_ids="0x18000001, 0x0, 0x00012C07" />
+ <param operation_mode_ids="0x18000001, 0x0, 0x00012C02" />
+ <param polling_enable_ids="0x18000001, 0x0, 0x00012C1B" />
+ <param custom_config_ids="0x18000001, 0x0, 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_raw, FTRT, 2000" />
+ <param client_capture_read_delay="2000" />
+ </sound_model_config>
+
+ <!-- Google Music Detection -->
+ <sound_model_config>
+ <param vendor_uuid="9f6ad62a-1f0b-11e7-87c5-40a8f03d3f15" />
+ <param execution_type="ADSP" /> <!-- value: "ADSP" "DYNAMIC" -->
+ <param library="none" />
+ <!-- kw_duration is in milli seconds. It is valid only for FTRT
+ transfer mode -->
+ <param capture_keyword="MULAW_raw, FTRT, 5000" />
+ <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="FFECNS" />
+ <param app_type="69947" />
+ <param sample_rate="16000" />
+ <param bit_width="16" />
+ <param out_channels="5"/>
+ </adm_config>
+</sound_trigger_platform_info>
diff --git a/configs/msmnile/msmnile.mk b/configs/msmnile/msmnile.mk
index 66fa211..1a0ab62 100644
--- a/configs/msmnile/msmnile.mk
+++ b/configs/msmnile/msmnile.mk
@@ -1,6 +1,13 @@
#BOARD_USES_GENERIC_AUDIO := true
#
#AUDIO_FEATURE_FLAGS
+ifeq ($(TARGET_USES_QMAA_OVERRIDE_AUDIO), false)
+ifeq ($(TARGET_USES_QMAA),true)
+AUDIO_USE_STUB_HAL := true
+endif
+endif
+
+ifneq ($(AUDIO_USE_STUB_HAL), true)
BOARD_USES_ALSA_AUDIO := true
TARGET_USES_AOSP_FOR_AUDIO := false
@@ -241,6 +248,7 @@
#enable AAC frame ctl for A2DP sinks
PRODUCT_PROPERTY_OVERRIDES += \
persist.vendor.bt.aac_frm_ctl.enabled=true
+endif
# for HIDL related packages
PRODUCT_PACKAGES += \
diff --git a/configs/msmsteppe/mixer_paths_qrd.xml b/configs/msmsteppe/mixer_paths_qrd.xml
index 95a59f0..5efd1aa 100644
--- a/configs/msmsteppe/mixer_paths_qrd.xml
+++ b/configs/msmsteppe/mixer_paths_qrd.xml
@@ -296,6 +296,7 @@
<ctl name="HPHL_RDAC Switch" value="0" />
<ctl name="HPHR_RDAC Switch" value="0" />
<ctl name="RDAC3_MUX" value="ZERO" />
+ <ctl name="RX_EAR Mode" value="OFF" />
<!-- TX Controls -->
<ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
@@ -2101,6 +2102,7 @@
<ctl name="RX INT0 DEM MUX" value="CLSH_DSM_OUT" />
<ctl name="EAR_RDAC Switch" value="1" />
<ctl name="RDAC3_MUX" value="RX1" />
+ <ctl name="RX_EAR Mode" value="ON" />
</path>
<path name="handset-mic">
@@ -2115,6 +2117,10 @@
<ctl name="RX INT1_1 MIX1 INP0" value="RX1" />
<ctl name="RX INT0 DEM MUX" value="CLSH_DSM_OUT" />
<ctl name="RX INT1 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX_COMP1 Switch" value="1" />
+ <ctl name="RX_COMP2 Switch" value="1" />
+ <ctl name="HPHL_COMP Switch" value="1" />
+ <ctl name="HPHR_COMP Switch" value="1" />
<ctl name="HPHL_RDAC Switch" value="1" />
<ctl name="HPHR_RDAC Switch" value="1" />
</path>
@@ -2301,6 +2307,7 @@
<ctl name="RX INT0_1 MIX1 INP0" value="RX0" />
<ctl name="RX INT0 DEM MUX" value="CLSH_DSM_OUT" />
<ctl name="RX_COMP1 Switch" value="1" />
+ <ctl name="HPHL_COMP Switch" value="1" />
<ctl name="HPHL_RDAC Switch" value="1" />
</path>
diff --git a/configs/msmsteppe/mixer_paths_wcd9375qrd.xml b/configs/msmsteppe/mixer_paths_wcd9375qrd.xml
index 2a9499e..758a1d3 100644
--- a/configs/msmsteppe/mixer_paths_wcd9375qrd.xml
+++ b/configs/msmsteppe/mixer_paths_wcd9375qrd.xml
@@ -303,6 +303,7 @@
<ctl name="HPHL_RDAC Switch" value="0" />
<ctl name="HPHR_RDAC Switch" value="0" />
<ctl name="RDAC3_MUX" value="ZERO" />
+ <ctl name="RX_EAR Mode" value="OFF" />
<!-- TX Controls -->
<ctl name="TX_CDC_DMA_TX_3 Channels" value="One" />
@@ -2183,6 +2184,7 @@
<ctl name="RX INT0 DEM MUX" value="CLSH_DSM_OUT" />
<ctl name="EAR_RDAC Switch" value="1" />
<ctl name="RDAC3_MUX" value="RX1" />
+ <ctl name="RX_EAR Mode" value="ON" />
</path>
<path name="handset-mic">
diff --git a/configs/sdm710/sound_trigger_platform_info.xml b/configs/sdm710/sound_trigger_platform_info.xml
index 9604b93..08dbebd 100644
--- a/configs/sdm710/sound_trigger_platform_info.xml
+++ b/configs/sdm710/sound_trigger_platform_info.xml
@@ -65,7 +65,7 @@
<!-- ec reference loopback params -->
<!-- split_ec_ref_data - true if ec ref is packed with mic captured data -->
<param split_ec_ref_data="false"/>
- <param ec_ref_channel_count="2"/>
+ <param ec_ref_channel_count="4"/>
<!-- Profile specific data which the algorithm can support -->
<param sample_rate="16000" />
diff --git a/configure.ac b/configure.ac
index 60e51eb..572e07d 100755
--- a/configure.ac
+++ b/configure.ac
@@ -140,6 +140,7 @@
AM_CONDITIONAL([CUSTOM_STEREO], [test x$AUDIO_FEATURE_ENABLED_CUSTOM_STEREO = xtrue])
AM_CONDITIONAL([RUN_KEEP_ALIVE_IN_ARM_FFV], [test x$AUDIO_FEATURE_ENABLED_KEEP_ALIVE_ARM_FFV = xtrue])
AM_CONDITIONAL([INSTANCE_ID], [test x$AUDIO_FEATURE_ENABLED_INSTANCE_ID = xtrue])
+AM_CONDITIONAL([LL_AS_PRIMARY_OUTPUT], [test x$AUDIO_USE_LL_AS_PRIMARY_OUTPUT = xtrue])
AC_CONFIG_FILES([ \
Makefile \
diff --git a/hal/Android.mk b/hal/Android.mk
index 783c6aa..1ba715b 100644
--- a/hal/Android.mk
+++ b/hal/Android.mk
@@ -1,3 +1,4 @@
+ifneq ($(AUDIO_USE_STUB_HAL), true)
ifeq ($(strip $(BOARD_USES_ALSA_AUDIO)),true)
LOCAL_PATH := $(call my-dir)
@@ -471,3 +472,4 @@
LOCAL_CFLAGS += -Wno-unused-local-typedef
endif
+endif
diff --git a/hal/Makefile.am b/hal/Makefile.am
index 995622d..aafc3e9 100644
--- a/hal/Makefile.am
+++ b/hal/Makefile.am
@@ -187,6 +187,7 @@
if AUDIO_HW_LOOPBACK
AM_CFLAGS += -DAUDIO_HW_LOOPBACK_ENABLED
+AM_CFLAGS += -DCOMPRESS_METADATA_NEEDED
c_sources += audio_extn/hw_loopback.c
endif
@@ -208,6 +209,10 @@
AM_CFLAGS += -DINSTANCE_ID_ENABLED
endif
+if LL_AS_PRIMARY_OUTPUT
+AM_CFLAGS += -DUSE_LL_AS_PRIMARY_OUTPUT
+endif
+
h_sources = audio_extn/audio_defs.h \
audio_extn/audio_extn.h \
audio_hw.h \
diff --git a/hal/audio_extn/a2dp.c b/hal/audio_extn/a2dp.c
index 1af7433..f08f379 100644
--- a/hal/audio_extn/a2dp.c
+++ b/hal/audio_extn/a2dp.c
@@ -50,15 +50,18 @@
#ifdef SPLIT_A2DP_ENABLED
#define AUDIO_PARAMETER_A2DP_STARTED "A2dpStarted"
-#define BT_IPC_LIB_NAME "libbthost_if.so"
-#define ENC_MEDIA_FMT_NONE 0
-#define ENC_MEDIA_FMT_AAC 0x00010DA6
-#define ENC_MEDIA_FMT_APTX 0x000131ff
-#define ENC_MEDIA_FMT_APTX_HD 0x00013200
-#define ENC_MEDIA_FMT_APTX_AD 0x00013204
-#define ENC_MEDIA_FMT_SBC 0x00010BF2
-#define ENC_MEDIA_FMT_CELT 0x00013221
-#define ENC_MEDIA_FMT_LDAC 0x00013224
+#define BT_IPC_SOURCE_LIB_NAME "libbthost_if.so"
+#define BT_IPC_SINK_LIB_NAME "libbthost_if_sink.so"
+#define MEDIA_FMT_NONE 0
+#define MEDIA_FMT_AAC 0x00010DA6
+#define MEDIA_FMT_APTX 0x000131ff
+#define MEDIA_FMT_APTX_HD 0x00013200
+#define MEDIA_FMT_APTX_AD 0x00013204
+#define MEDIA_FMT_SBC 0x00010BF2
+#define MEDIA_FMT_CELT 0x00013221
+#define MEDIA_FMT_LDAC 0x00013224
+#define MEDIA_FMT_MP3 0x00010BE9
+#define MEDIA_FMT_APTX_ADAPTIVE 0x00013204
#define MEDIA_FMT_AAC_AOT_LC 2
#define MEDIA_FMT_AAC_AOT_SBR 5
#define MEDIA_FMT_AAC_AOT_PS 29
@@ -71,16 +74,20 @@
#define MEDIA_FMT_SBC_CHANNEL_MODE_JOINT_STEREO 9
#define MEDIA_FMT_SBC_ALLOCATION_METHOD_LOUDNESS 0
#define MEDIA_FMT_SBC_ALLOCATION_METHOD_SNR 1
-#define MIXER_ENC_CONFIG_BLOCK "SLIM_7_RX Encoder Config"
-#define MIXER_DEC_CONFIG_BLOCK "SLIM_7_TX Decoder Config"
+#define MIXER_ENC_CONFIG_BLOCK "SLIM_7_RX Encoder Config"
+#define MIXER_SOURCE_DEC_CONFIG_BLOCK "SLIM_7_TX Decoder Config"
+#define MIXER_SINK_DEC_CONFIG_BLOCK "SLIM_9_TX Decoder Config"
#define MIXER_ENC_BIT_FORMAT "AFE Input Bit Format"
+#define MIXER_DEC_BIT_FORMAT "AFE Output Bit Format"
#define MIXER_SCRAMBLER_MODE "AFE Scrambler Mode"
#define MIXER_SAMPLE_RATE_RX "BT SampleRate RX"
-#define MIXER_SAMPLE_RATE_TX "BT SampleRate TX"
+#define MIXER_SOURCE_SAMPLE_RATE_TX "BT SampleRate TX"
#define MIXER_SAMPLE_RATE_DEFAULT "BT SampleRate"
#define MIXER_AFE_IN_CHANNELS "AFE Input Channels"
#define MIXER_ABR_TX_FEEDBACK_PATH "A2DP_SLIM7_UL_HL Switch"
#define MIXER_SET_FEEDBACK_CHANNEL "BT set feedback channel"
+#define MIXER_SINK_SAMPLE_RATE "BT_TX SampleRate"
+#define MIXER_AFE_SINK_CHANNELS "AFE Output Channels"
#define MIXER_ENC_FMT_SBC "SBC"
#define MIXER_ENC_FMT_AAC "AAC"
#define MIXER_ENC_FMT_APTX "APTX"
@@ -118,25 +125,28 @@
#define SAMPLING_RATE_441K 44100
#define CH_STEREO 2
#define CH_MONO 1
+#define SOURCE 0
+#define SINK 1
+
/*
* Below enum values are extended from audio_base.h to
- * to keep encoder codec type local to bthost_ipc
+ * to keep encoder and decoder 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 = AUDIO_FORMAT_INVALID, // 0xFFFFFFFFUL
- ENC_CODEC_TYPE_AAC = AUDIO_FORMAT_AAC, // 0x04000000UL
- ENC_CODEC_TYPE_SBC = AUDIO_FORMAT_SBC, // 0x1F000000UL
- ENC_CODEC_TYPE_APTX = AUDIO_FORMAT_APTX, // 0x20000000UL
- ENC_CODEC_TYPE_APTX_HD = AUDIO_FORMAT_APTX_HD, // 0x21000000UL
+ CODEC_TYPE_INVALID = AUDIO_FORMAT_INVALID, // 0xFFFFFFFFUL
+ CODEC_TYPE_AAC = AUDIO_FORMAT_AAC, // 0x04000000UL
+ CODEC_TYPE_SBC = AUDIO_FORMAT_SBC, // 0x1F000000UL
+ CODEC_TYPE_APTX = AUDIO_FORMAT_APTX, // 0x20000000UL
+ CODEC_TYPE_APTX_HD = AUDIO_FORMAT_APTX_HD, // 0x21000000UL
#ifndef LINUX_ENABLED
- ENC_CODEC_TYPE_APTX_DUAL_MONO = 570425344u, // 0x22000000UL
+ CODEC_TYPE_APTX_DUAL_MONO = 570425344u, // 0x22000000UL
#endif
- ENC_CODEC_TYPE_LDAC = AUDIO_FORMAT_LDAC, // 0x23000000UL
- ENC_CODEC_TYPE_CELT = 603979776u, // 0x24000000UL
- ENC_CODEC_TYPE_APTX_AD = 620756992u, // 0x25000000UL
-}enc_codec_t;
+ CODEC_TYPE_LDAC = AUDIO_FORMAT_LDAC, // 0x23000000UL
+ CODEC_TYPE_CELT = 603979776u, // 0x24000000UL
+ CODEC_TYPE_APTX_AD = 620756992u, // 0x25000000UL
+}codec_t;
/*
* enums which describes the APTX Adaptive
@@ -162,19 +172,24 @@
APTX_AD_44_1 = 0x2, // 44.1kHz
} enc_aptx_ad_s_rate;
-typedef int (*audio_stream_open_t)(void);
-typedef int (*audio_stream_close_t)(void);
-typedef int (*audio_start_stream_t)(void);
-typedef int (*audio_stop_stream_t)(void);
-typedef int (*audio_suspend_stream_t)(void);
-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,
- enc_codec_t *codec_type);
-typedef int (*audio_check_a2dp_ready_t)(void);
-typedef uint16_t (*audio_get_a2dp_sink_latency_t)(void);
-typedef int (*audio_is_scrambling_enabled_t)(void);
+typedef int (*audio_source_open_t)(void);
+typedef int (*audio_source_close_t)(void);
+typedef int (*audio_source_start_t)(void);
+typedef int (*audio_source_stop_t)(void);
+typedef int (*audio_source_suspend_t)(void);
+typedef void (*audio_source_handoff_triggered_t)(void);
+typedef void (*clear_source_a2dpsuspend_flag_t)(void);
+typedef void * (*audio_get_enc_config_t)(uint8_t *multicast_status,
+ uint8_t *num_dev, codec_t *codec_type);
+typedef int (*audio_source_check_a2dp_ready_t)(void);
+typedef int (*audio_is_source_scrambling_enabled_t)(void);
typedef bool (*audio_is_tws_mono_mode_enable_t)(void);
+typedef int (*audio_sink_start_t)(void);
+typedef int (*audio_sink_stop_t)(void);
+typedef void * (*audio_get_dec_config_t)(codec_t *codec_type);
+typedef void * (*audio_sink_session_setup_complete_t)(uint64_t system_latency);
+typedef int (*audio_sink_check_a2dp_ready_t)(void);
+typedef uint16_t (*audio_sink_get_a2dp_latency_t)(void);
enum A2DP_STATE {
A2DP_STATE_CONNECTED,
@@ -230,26 +245,25 @@
*/
struct a2dp_data {
struct audio_device *adev;
- void *bt_lib_handle;
- audio_stream_open_t audio_stream_open;
- audio_stream_close_t audio_stream_close;
- audio_start_stream_t audio_start_stream;
- audio_stop_stream_t audio_stop_stream;
- audio_suspend_stream_t audio_suspend_stream;
- audio_handoff_triggered_t audio_handoff_triggered;
- clear_a2dpsuspend_flag_t clear_a2dpsuspend_flag;
- audio_get_codec_config_t audio_get_codec_config;
- audio_check_a2dp_ready_t audio_check_a2dp_ready;
- audio_get_a2dp_sink_latency_t audio_get_a2dp_sink_latency;
- audio_is_scrambling_enabled_t audio_is_scrambling_enabled;
+ void *bt_lib_source_handle;
+ audio_source_open_t audio_source_open;
+ audio_source_close_t audio_source_close;
+ audio_source_start_t audio_source_start;
+ audio_source_stop_t audio_source_stop;
+ audio_source_suspend_t audio_source_suspend;
+ audio_source_handoff_triggered_t audio_source_handoff_triggered;
+ clear_source_a2dpsuspend_flag_t clear_source_a2dpsuspend_flag;
+ audio_get_enc_config_t audio_get_enc_config;
+ audio_source_check_a2dp_ready_t audio_source_check_a2dp_ready;
audio_is_tws_mono_mode_enable_t audio_is_tws_mono_mode_enable;
- enum A2DP_STATE bt_state;
- enc_codec_t bt_encoder_format;
+ audio_is_source_scrambling_enabled_t audio_is_source_scrambling_enabled;
+ enum A2DP_STATE bt_state_source;
+ codec_t bt_encoder_format;
uint32_t enc_sampling_rate;
uint32_t enc_channels;
- bool a2dp_started;
- bool a2dp_suspended;
- int a2dp_total_active_session_request;
+ bool a2dp_source_started;
+ bool a2dp_source_suspended;
+ int a2dp_source_total_active_session_requests;
bool is_a2dp_offload_supported;
bool is_handoff_in_progress;
bool is_aptx_dual_mono_supported;
@@ -258,6 +272,20 @@
bool is_aptx_adaptive;
/* Adaptive bitrate config for A2DP codecs */
struct a2dp_abr_config abr_config;
+
+ void *bt_lib_sink_handle;
+ audio_sink_start_t audio_sink_start;
+ audio_sink_stop_t audio_sink_stop;
+ audio_get_dec_config_t audio_get_dec_config;
+ audio_sink_session_setup_complete_t audio_sink_session_setup_complete;
+ audio_sink_check_a2dp_ready_t audio_sink_check_a2dp_ready;
+ audio_sink_get_a2dp_latency_t audio_sink_get_a2dp_latency;
+ enum A2DP_STATE bt_state_sink;
+ codec_t bt_decoder_format;
+ uint32_t dec_sampling_rate;
+ uint32_t dec_channels;
+ bool a2dp_sink_started;
+ int a2dp_sink_total_active_session_requests;
};
struct a2dp_data a2dp;
@@ -364,6 +392,37 @@
struct aac_frame_size_control_t frame_ctl;
} __attribute__ ((packed));
+typedef struct audio_aac_decoder_config_t audio_aac_decoder_config_t;
+struct audio_aac_decoder_config_t {
+ uint16_t aac_fmt_flag; /* LATM*/
+ uint16_t audio_object_type; /* LC */
+ uint16_t channels; /* Stereo */
+ uint16_t total_size_of_pce_bits; /* 0 - only for channel conf PCE */
+ uint32_t sampling_rate; /* 8k, 11.025k, 12k, 16k, 22.05k, 24k, 32k,
+ 44.1k, 48k, 64k, 88.2k, 96k */
+} __attribute__ ((packed));
+
+typedef struct audio_sbc_decoder_config_t audio_sbc_decoder_config_t;
+struct audio_sbc_decoder_config_t {
+ uint16_t channels; /* Mono, Stereo */
+ uint32_t sampling_rate; /* 8k, 11.025k, 12k, 16k, 22.05k, 24k, 32k,
+ 44.1k, 48k, 64k, 88.2k, 96k */
+} __attribute__ ((packed));
+
+/* AAC decoder configuration structure. */
+typedef struct aac_dec_cfg_t aac_dec_cfg_t;
+struct aac_dec_cfg_t {
+ uint32_t dec_format;
+ audio_aac_decoder_config_t data;
+} __attribute__ ((packed));
+
+/* SBC decoder configuration structure. */
+typedef struct sbc_dec_cfg_t sbc_dec_cfg_t;
+struct sbc_dec_cfg_t {
+ uint32_t dec_format;
+ audio_sbc_decoder_config_t data;
+} __attribute__ ((packed));
+
/* SBC encoder configuration structure. */
typedef struct sbc_enc_cfg_t sbc_enc_cfg_t;
@@ -547,12 +606,12 @@
uint32_t bitrate;
uint32_t bits_per_sample;
} audio_aac_encoder_config;
+#endif
typedef struct {
audio_aac_encoder_config audio_aac_enc_cfg;
struct aac_frame_size_control_t frame_ctl;
} audio_aac_encoder_config_v2;
-#endif
/* Information about BT CELT encoder configuration
* This data is used between audio HAL module and
@@ -583,6 +642,29 @@
uint32_t bits_per_sample;
} audio_ldac_encoder_config;
+/* Information about BT AAC decoder configuration
+ * This data is used between audio HAL module and
+ * BT IPC library to configure DSP decoder
+ */
+typedef struct {
+ uint16_t aac_fmt_flag; /* LATM*/
+ uint16_t audio_object_type; /* LC */
+ uint16_t channels; /* Stereo */
+ uint16_t total_size_of_pce_bits; /* 0 - only for channel conf PCE */
+ uint32_t sampling_rate; /* 8k, 11.025k, 12k, 16k, 22.05k, 24k, 32k,
+ 44.1k, 48k, 64k, 88.2k, 96k */
+} audio_aac_dec_config_t;
+
+/* Information about BT SBC decoder configuration
+ * This data is used between audio HAL module and
+ * BT IPC library to configure DSP decoder
+ */
+typedef struct {
+ uint16_t channels; /* Mono, Stereo */
+ uint32_t sampling_rate; /* 8k, 11.025k, 12k, 16k, 22.05k, 24k, 32k,
+ 44.1k, 48k, 64k, 88.2k, 96k */
+}audio_sbc_dec_config_t;
+
/*********** END of DSP configurable structures ********************/
/* API to identify DSP encoder captabilities */
@@ -752,98 +834,150 @@
return -ENOSYS;
}
-/* API to open BT IPC library to start IPC communication */
-static void open_a2dp_output()
+/* API to open BT IPC library to start IPC communication for BT Source*/
+static void open_a2dp_source()
{
int ret = 0;
- ALOGD(" Open A2DP output start ");
- if (a2dp.bt_lib_handle == NULL){
+ ALOGD(" Open A2DP source start ");
+ if (a2dp.bt_lib_source_handle == NULL){
ALOGD(" Requesting for BT lib handle");
- a2dp.bt_lib_handle = dlopen(BT_IPC_LIB_NAME, RTLD_NOW);
+ a2dp.bt_lib_source_handle = dlopen(BT_IPC_SOURCE_LIB_NAME, RTLD_NOW);
- if (a2dp.bt_lib_handle == NULL) {
- ALOGE("%s: DLOPEN failed for %s", __func__, BT_IPC_LIB_NAME);
+ if (a2dp.bt_lib_source_handle == NULL) {
+ ALOGE("%s: DLOPEN failed for %s", __func__, BT_IPC_SOURCE_LIB_NAME);
ret = -ENOSYS;
goto init_fail;
} else {
- a2dp.audio_stream_open = (audio_stream_open_t)
- dlsym(a2dp.bt_lib_handle, "audio_stream_open");
- a2dp.audio_start_stream = (audio_start_stream_t)
- dlsym(a2dp.bt_lib_handle, "audio_start_stream");
- a2dp.audio_get_codec_config = (audio_get_codec_config_t)
- dlsym(a2dp.bt_lib_handle, "audio_get_codec_config");
- a2dp.audio_suspend_stream = (audio_suspend_stream_t)
- dlsym(a2dp.bt_lib_handle, "audio_suspend_stream");
- a2dp.audio_handoff_triggered = (audio_handoff_triggered_t)
- dlsym(a2dp.bt_lib_handle, "audio_handoff_triggered");
- a2dp.clear_a2dpsuspend_flag = (clear_a2dpsuspend_flag_t)
- dlsym(a2dp.bt_lib_handle, "clear_a2dpsuspend_flag");
- a2dp.audio_stop_stream = (audio_stop_stream_t)
- dlsym(a2dp.bt_lib_handle, "audio_stop_stream");
- a2dp.audio_stream_close = (audio_stream_close_t)
- dlsym(a2dp.bt_lib_handle, "audio_stream_close");
- a2dp.audio_check_a2dp_ready = (audio_check_a2dp_ready_t)
- dlsym(a2dp.bt_lib_handle,"audio_check_a2dp_ready");
- a2dp.audio_get_a2dp_sink_latency = (audio_get_a2dp_sink_latency_t)
- dlsym(a2dp.bt_lib_handle,"audio_get_a2dp_sink_latency");
- a2dp.audio_is_scrambling_enabled = (audio_is_scrambling_enabled_t)
- dlsym(a2dp.bt_lib_handle,"audio_is_scrambling_enabled");
+ a2dp.audio_source_open = (audio_source_open_t)
+ dlsym(a2dp.bt_lib_source_handle, "audio_stream_open");
+ a2dp.audio_source_start = (audio_source_start_t)
+ dlsym(a2dp.bt_lib_source_handle, "audio_start_stream");
+ a2dp.audio_get_enc_config = (audio_get_enc_config_t)
+ dlsym(a2dp.bt_lib_source_handle, "audio_get_codec_config");
+ a2dp.audio_source_suspend = (audio_source_suspend_t)
+ dlsym(a2dp.bt_lib_source_handle, "audio_suspend_stream");
+ a2dp.audio_source_handoff_triggered = (audio_source_handoff_triggered_t)
+ dlsym(a2dp.bt_lib_source_handle, "audio_handoff_triggered");
+ a2dp.clear_source_a2dpsuspend_flag = (clear_source_a2dpsuspend_flag_t)
+ dlsym(a2dp.bt_lib_source_handle, "clear_a2dpsuspend_flag");
+ a2dp.audio_source_stop = (audio_source_stop_t)
+ dlsym(a2dp.bt_lib_source_handle, "audio_stop_stream");
+ a2dp.audio_source_close = (audio_source_close_t)
+ dlsym(a2dp.bt_lib_source_handle, "audio_stream_close");
+ a2dp.audio_source_check_a2dp_ready = (audio_source_check_a2dp_ready_t)
+ dlsym(a2dp.bt_lib_source_handle,"audio_check_a2dp_ready");
+ a2dp.audio_sink_get_a2dp_latency = (audio_sink_get_a2dp_latency_t)
+ dlsym(a2dp.bt_lib_source_handle,"audio_sink_get_a2dp_latency");
+ a2dp.audio_is_source_scrambling_enabled = (audio_is_source_scrambling_enabled_t)
+ dlsym(a2dp.bt_lib_source_handle,"audio_is_scrambling_enabled");
a2dp.audio_is_tws_mono_mode_enable = (audio_is_tws_mono_mode_enable_t)
- dlsym(a2dp.bt_lib_handle,"isTwsMonomodeEnable");
+ dlsym(a2dp.bt_lib_source_handle,"isTwsMonomodeEnable");
}
}
- if (a2dp.bt_lib_handle && a2dp.audio_stream_open) {
- if (a2dp.bt_state == A2DP_STATE_DISCONNECTED) {
+ if (a2dp.bt_lib_source_handle && a2dp.audio_source_open) {
+ if (a2dp.bt_state_source == A2DP_STATE_DISCONNECTED) {
ALOGD("calling BT stream open");
- ret = a2dp.audio_stream_open();
+ ret = a2dp.audio_source_open();
if(ret != 0) {
- ALOGE("Failed to open output stream for a2dp: status %d", ret);
+ ALOGE("Failed to open source stream for a2dp: status %d", ret);
goto init_fail;
}
- a2dp.bt_state = A2DP_STATE_CONNECTED;
+ a2dp.bt_state_source = A2DP_STATE_CONNECTED;
} else {
- ALOGD("Called a2dp open with improper state, Ignoring request state %d", a2dp.bt_state);
+ ALOGD("Called a2dp open with improper state, Ignoring request state %d", a2dp.bt_state_source);
}
} else {
ALOGE("a2dp handle is not identified, Ignoring open request");
- a2dp.bt_state = A2DP_STATE_DISCONNECTED;
+ a2dp.bt_state_source = A2DP_STATE_DISCONNECTED;
goto init_fail;
}
init_fail:
- if(ret != 0 && (a2dp.bt_lib_handle != NULL)) {
- dlclose(a2dp.bt_lib_handle);
- a2dp.bt_lib_handle = NULL;
+ if(ret != 0 && (a2dp.bt_lib_source_handle != NULL)) {
+ dlclose(a2dp.bt_lib_source_handle);
+ a2dp.bt_lib_source_handle = NULL;
+ }
+}
+
+/* API to open BT IPC library to start IPC communication for BT Sink*/
+static void open_a2dp_sink()
+{
+ ALOGD(" Open A2DP input start ");
+ if (a2dp.bt_lib_sink_handle == NULL){
+ ALOGD(" Requesting for BT lib handle");
+ a2dp.bt_lib_sink_handle = dlopen(BT_IPC_SINK_LIB_NAME, RTLD_NOW);
+
+ if (a2dp.bt_lib_sink_handle == NULL) {
+ ALOGE("%s: DLOPEN failed for %s", __func__, BT_IPC_SINK_LIB_NAME);
+ } else {
+ a2dp.audio_sink_start = (audio_sink_start_t)
+ dlsym(a2dp.bt_lib_sink_handle, "audio_sink_start_capture");
+ a2dp.audio_get_dec_config = (audio_get_dec_config_t)
+ dlsym(a2dp.bt_lib_sink_handle, "audio_get_decoder_config");
+ a2dp.audio_sink_stop = (audio_sink_stop_t)
+ dlsym(a2dp.bt_lib_sink_handle, "audio_sink_stop_capture");
+ a2dp.audio_sink_check_a2dp_ready = (audio_sink_check_a2dp_ready_t)
+ dlsym(a2dp.bt_lib_sink_handle,"audio_sink_check_a2dp_ready");
+ a2dp.audio_sink_session_setup_complete = (audio_sink_session_setup_complete_t)
+ dlsym(a2dp.bt_lib_sink_handle, "audio_sink_session_setup_complete");
+ }
}
}
static int close_a2dp_output()
{
ALOGV("%s\n",__func__);
- if (!(a2dp.bt_lib_handle && a2dp.audio_stream_close)) {
- ALOGE("a2dp handle is not identified, Ignoring close request");
+
+ if (!(a2dp.bt_lib_source_handle && a2dp.audio_source_close)) {
+ ALOGE("a2dp source handle is not identified, Ignoring close request");
return -ENOSYS;
}
- if (a2dp.bt_state != A2DP_STATE_DISCONNECTED) {
- ALOGD("calling BT stream close");
- if(a2dp.audio_stream_close() == false)
- ALOGE("failed close a2dp control path from BT library");
+
+ if (a2dp.bt_state_source != A2DP_STATE_DISCONNECTED) {
+ ALOGD("calling BT source stream close");
+ if(a2dp.audio_source_close() == false)
+ ALOGE("failed close a2dp source control path from BT library");
}
- a2dp.a2dp_started = false;
- a2dp.a2dp_total_active_session_request = 0;
- a2dp.a2dp_suspended = false;
- a2dp.bt_encoder_format = ENC_CODEC_TYPE_INVALID;
+ a2dp.a2dp_source_started = false;
+ a2dp.a2dp_source_total_active_session_requests = 0;
+ a2dp.a2dp_source_suspended = false;
+ a2dp.bt_encoder_format = CODEC_TYPE_INVALID;
a2dp.enc_sampling_rate = 48000;
a2dp.enc_channels = 2;
- a2dp.bt_state = A2DP_STATE_DISCONNECTED;
+ a2dp.bt_state_source = A2DP_STATE_DISCONNECTED;
if (a2dp.abr_config.is_abr_enabled && a2dp.abr_config.abr_started)
stop_abr();
a2dp.abr_config.is_abr_enabled = false;
a2dp.abr_config.abr_started = false;
a2dp.abr_config.imc_instance = 0;
a2dp.abr_config.abr_tx_handle = NULL;
+ a2dp.bt_state_source = A2DP_STATE_DISCONNECTED;
+
+ return 0;
+}
+
+static int close_a2dp_input()
+{
+ ALOGV("%s\n",__func__);
+
+ if (!(a2dp.bt_lib_sink_handle && a2dp.audio_source_close)) {
+ ALOGE("a2dp sink handle is not identified, Ignoring close request");
+ return -ENOSYS;
+ }
+
+ if (a2dp.bt_state_sink != A2DP_STATE_DISCONNECTED) {
+ ALOGD("calling BT sink stream close");
+ if(a2dp.audio_source_close() == false)
+ ALOGE("failed close a2dp sink control path from BT library");
+ }
+ a2dp.a2dp_sink_started = false;
+ a2dp.a2dp_sink_total_active_session_requests = 0;
+ a2dp.bt_decoder_format = CODEC_TYPE_INVALID;
+ a2dp.dec_sampling_rate = 48000;
+ a2dp.dec_channels = 2;
+ a2dp.bt_state_sink = A2DP_STATE_DISCONNECTED;
return 0;
}
@@ -852,15 +986,15 @@
{
bool scrambler_mode = false;
struct mixer_ctl *ctrl_scrambler_mode = NULL;
- if (a2dp.audio_is_scrambling_enabled && (a2dp.bt_state != A2DP_STATE_DISCONNECTED))
- scrambler_mode = a2dp.audio_is_scrambling_enabled();
+ if (a2dp.audio_is_source_scrambling_enabled && (a2dp.bt_state_source != A2DP_STATE_DISCONNECTED))
+ scrambler_mode = a2dp.audio_is_source_scrambling_enabled();
if (scrambler_mode) {
//enable scrambler in dsp
ctrl_scrambler_mode = mixer_get_ctl_by_name(a2dp.adev->mixer,
MIXER_SCRAMBLER_MODE);
if (!ctrl_scrambler_mode) {
- ALOGE(" ERROR scrambler mode mixer control not identifed");
+ ALOGE(" ERROR scrambler mode mixer control not identified");
return;
} else {
if (mixer_ctl_set_value(ctrl_scrambler_mode, 0, true) != 0) {
@@ -871,21 +1005,29 @@
}
}
-static int a2dp_set_backend_cfg()
+static bool a2dp_set_backend_cfg(uint8_t direction)
{
- char *rate_str = NULL, *in_channels = NULL;
- uint32_t sampling_rate_rx = a2dp.enc_sampling_rate;
- struct mixer_ctl *ctl_sample_rate = NULL, *ctrl_in_channels = NULL;
+ char *rate_str = NULL, *channels = NULL;
+ uint32_t sampling_rate;
+ struct mixer_ctl *ctl_sample_rate = NULL, *ctrl_channels = NULL;
+ bool is_configured = false;
- //For LDAC encoder open slimbus port at 96Khz for 48Khz input
- //and 88.2Khz for 44.1Khz input.
- if ((a2dp.bt_encoder_format == ENC_CODEC_TYPE_LDAC) &&
- (sampling_rate_rx == 48000 || sampling_rate_rx == 44100 )) {
- sampling_rate_rx *= 2;
+ if (direction == SINK) {
+ sampling_rate = a2dp.dec_sampling_rate;
+ } else {
+ sampling_rate = a2dp.enc_sampling_rate;
+ }
+ //For LDAC encoder and AAC decoder open slimbus port at
+ //96Khz for 48Khz input and 88.2Khz for 44.1Khz input.
+ if (((a2dp.bt_encoder_format == CODEC_TYPE_LDAC) ||
+ (a2dp.bt_decoder_format == CODEC_TYPE_SBC) ||
+ (a2dp.bt_decoder_format == AUDIO_FORMAT_AAC)) &&
+ (sampling_rate == 48000 || sampling_rate == 44100 )) {
+ sampling_rate = sampling_rate *2;
}
- // Set Rx backend sample rate
- switch (sampling_rate_rx) {
+ //Configure backend sampling rate
+ switch (sampling_rate) {
case 44100:
rate_str = "KHZ_44P1";
break;
@@ -901,31 +1043,42 @@
break;
}
- ALOGD("%s: set backend rx sample rate = %s", __func__, rate_str);
- ctl_sample_rate = mixer_get_ctl_by_name(a2dp.adev->mixer,
- MIXER_SAMPLE_RATE_RX);
+ if (direction == SINK) {
+ ALOGD("%s: set sink backend sample rate =%s", __func__, rate_str);
+ ctl_sample_rate = mixer_get_ctl_by_name(a2dp.adev->mixer,
+ MIXER_SINK_SAMPLE_RATE);
+ } else {
+ ALOGD("%s: set source backend sample rate =%s", __func__, rate_str);
+ ctl_sample_rate = mixer_get_ctl_by_name(a2dp.adev->mixer,
+ MIXER_SAMPLE_RATE_RX);
+ }
if (ctl_sample_rate) {
if (mixer_ctl_set_enum_by_string(ctl_sample_rate, rate_str) != 0) {
ALOGE("%s: Failed to set backend sample rate = %s", __func__, rate_str);
- return -ENOSYS;
+ is_configured = false;
+ goto fail;
}
- /* Set Tx backend sample rate */
- if (a2dp.abr_config.is_abr_enabled)
- rate_str = ABR_TX_SAMPLE_RATE;
+ if (direction == SOURCE) {
+ /* Set Tx backend sample rate */
+ if (a2dp.abr_config.is_abr_enabled)
+ rate_str = ABR_TX_SAMPLE_RATE;
- ALOGD("%s: set backend tx sample rate = %s", __func__, rate_str);
- ctl_sample_rate = mixer_get_ctl_by_name(a2dp.adev->mixer,
- MIXER_SAMPLE_RATE_TX);
- if (!ctl_sample_rate) {
+ ALOGD("%s: set backend tx sample rate = %s", __func__, rate_str);
+ ctl_sample_rate = mixer_get_ctl_by_name(a2dp.adev->mixer,
+ MIXER_SOURCE_SAMPLE_RATE_TX);
+ if (!ctl_sample_rate) {
ALOGE("%s: ERROR backend sample rate mixer control not identifed", __func__);
- return -ENOSYS;
- }
+ is_configured = false;
+ goto fail;
+ }
- if (mixer_ctl_set_enum_by_string(ctl_sample_rate, rate_str) != 0) {
- ALOGE("%s: Failed to set backend sample rate = %s", __func__, rate_str);
- return -ENOSYS;
+ if (mixer_ctl_set_enum_by_string(ctl_sample_rate, rate_str) != 0) {
+ ALOGE("%s: Failed to set backend sample rate = %s", __func__, rate_str);
+ is_configured = false;
+ goto fail;
+ }
}
} else {
/* Fallback to legacy approch if MIXER_SAMPLE_RATE_RX and
@@ -934,39 +1087,127 @@
MIXER_SAMPLE_RATE_DEFAULT);
if (!ctl_sample_rate) {
ALOGE("%s: ERROR backend sample rate mixer control not identifed", __func__);
- return -ENOSYS;
+ is_configured = false;
+ goto fail;
}
if (mixer_ctl_set_enum_by_string(ctl_sample_rate, rate_str) != 0) {
ALOGE("%s: Failed to set backend sample rate = %s", __func__, rate_str);
- return -ENOSYS;
+ is_configured = false;
+ goto fail;
}
}
- //Configure AFE input channels
- switch (a2dp.enc_channels) {
- case 1:
- in_channels = "One";
+ if (direction == SINK) {
+ switch (a2dp.dec_channels) {
+ case 1:
+ channels = "One";
+ break;
+ case 2:
+ default:
+ channels = "Two";
+ break;
+ }
+
+ ALOGD("%s: set afe dec channels =%s", __func__, channels);
+ ctrl_channels = mixer_get_ctl_by_name(a2dp.adev->mixer,
+ MIXER_AFE_SINK_CHANNELS);
+ } else {
+ //Configure AFE enc channels
+ switch (a2dp.enc_channels) {
+ case 1:
+ channels = "One";
+ break;
+ case 2:
+ default:
+ channels = "Two";
+ break;
+ }
+
+ ALOGD("%s: set afe enc channels =%s", __func__, channels);
+ ctrl_channels = mixer_get_ctl_by_name(a2dp.adev->mixer,
+ MIXER_AFE_IN_CHANNELS);
+ }
+
+ if (!ctrl_channels) {
+ ALOGE(" ERROR AFE channels mixer control not identified");
+ } else {
+ if (mixer_ctl_set_enum_by_string(ctrl_channels, channels) != 0) {
+ ALOGE("%s: Failed to set AFE channels =%s", __func__, channels);
+ is_configured = false;
+ goto fail;
+ }
+ }
+ is_configured = true;
+fail:
+ return is_configured;
+}
+
+bool configure_aac_dec_format(audio_aac_dec_config_t *aac_bt_cfg)
+{
+ struct mixer_ctl *ctl_dec_data = NULL, *ctrl_bit_format = NULL;
+ struct aac_dec_cfg_t aac_dsp_cfg;
+ bool is_configured = false;
+ int ret = 0;
+
+ if(aac_bt_cfg == NULL)
+ return false;
+
+ ctl_dec_data = mixer_get_ctl_by_name(a2dp.adev->mixer, MIXER_SINK_DEC_CONFIG_BLOCK);
+ if (!ctl_dec_data) {
+ ALOGE(" ERROR a2dp decoder CONFIG data mixer control not identified");
+ is_configured = false;
+ goto fail;
+ }
+
+ memset(&aac_dsp_cfg, 0x0, sizeof(struct aac_dec_cfg_t));
+ aac_dsp_cfg.dec_format = MEDIA_FMT_AAC;
+ aac_dsp_cfg.data.aac_fmt_flag = aac_bt_cfg->aac_fmt_flag;
+ aac_dsp_cfg.data.channels = aac_bt_cfg->channels;
+ switch(aac_bt_cfg->audio_object_type) {
+ case 0:
+ aac_dsp_cfg.data.audio_object_type = MEDIA_FMT_AAC_AOT_LC;
break;
case 2:
+ aac_dsp_cfg.data.audio_object_type = MEDIA_FMT_AAC_AOT_PS;
+ break;
+ case 1:
default:
- in_channels = "Two";
+ aac_dsp_cfg.data.audio_object_type = MEDIA_FMT_AAC_AOT_SBR;
break;
}
-
- ALOGD("%s: set AFE input channels = %d", __func__, a2dp.enc_channels);
- ctrl_in_channels = mixer_get_ctl_by_name(a2dp.adev->mixer,
- MIXER_AFE_IN_CHANNELS);
- if (!ctrl_in_channels) {
- ALOGE("%s: ERROR AFE input channels mixer control not identifed", __func__);
- return -ENOSYS;
- }
- if (mixer_ctl_set_enum_by_string(ctrl_in_channels, in_channels) != 0) {
- ALOGE("%s: Failed to set AFE in channels = %d", __func__, a2dp.enc_channels);
- return -ENOSYS;
+ aac_dsp_cfg.data.total_size_of_pce_bits = aac_bt_cfg->total_size_of_pce_bits;
+ aac_dsp_cfg.data.sampling_rate = aac_bt_cfg->sampling_rate;
+ ret = mixer_ctl_set_array(ctl_dec_data, (void *)&aac_dsp_cfg,
+ sizeof(struct aac_dec_cfg_t));
+ if (ret != 0) {
+ ALOGE("%s: failed to set AAC decoder config", __func__);
+ is_configured = false;
+ goto fail;
}
- return 0;
+ ctrl_bit_format = mixer_get_ctl_by_name(a2dp.adev->mixer,
+ MIXER_DEC_BIT_FORMAT);
+ if (!ctrl_bit_format) {
+ ALOGE(" ERROR Dec bit format mixer control not identified");
+ 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 decoder", __func__);
+ is_configured = false;
+ goto fail;
+ }
+
+ is_configured = true;
+ a2dp.bt_decoder_format = CODEC_TYPE_AAC;
+ a2dp.dec_channels = aac_dsp_cfg.data.channels;
+ a2dp.dec_sampling_rate = aac_dsp_cfg.data.sampling_rate;
+ ALOGV("Successfully updated AAC dec format with sampling_rate: %d channels:%d",
+ aac_dsp_cfg.data.sampling_rate, aac_dsp_cfg.data.channels);
+fail:
+ return is_configured;
}
static int a2dp_set_bit_format(uint32_t enc_bit_format)
@@ -1002,25 +1243,31 @@
return 0;
}
-static int a2dp_reset_backend_cfg()
+static int a2dp_reset_backend_cfg(uint8_t direction)
{
- const char *rate_str = "KHZ_8", *in_channels = "Zero";
- struct mixer_ctl *ctl_sample_rate_rx = NULL, *ctl_sample_rate_tx = NULL;
- struct mixer_ctl *ctrl_in_channels = NULL;
+ const char *rate_str = "KHZ_8", *channels = "Zero";
+ struct mixer_ctl *ctl_sample_rate = NULL, *ctl_sample_rate_tx = NULL;
+ struct mixer_ctl *ctrl_channels = NULL;
// Reset backend sampling rate
- ALOGD("%s: reset backend sample rate = %s", __func__, rate_str);
- ctl_sample_rate_rx = mixer_get_ctl_by_name(a2dp.adev->mixer,
- MIXER_SAMPLE_RATE_RX);
- if (ctl_sample_rate_rx) {
+ if (direction == SINK) {
+ ALOGD("%s: reset sink backend sample rate =%s", __func__, rate_str);
+ ctl_sample_rate = mixer_get_ctl_by_name(a2dp.adev->mixer,
+ MIXER_SINK_SAMPLE_RATE);
+ } else {
+ ALOGD("%s: reset source backend sample rate =%s", __func__, rate_str);
+ ctl_sample_rate = mixer_get_ctl_by_name(a2dp.adev->mixer,
+ MIXER_SAMPLE_RATE_RX);
+ }
+ if (ctl_sample_rate) {
- if (mixer_ctl_set_enum_by_string(ctl_sample_rate_rx, rate_str) != 0) {
- ALOGE("%s: Failed to reset Rx backend sample rate = %s", __func__, rate_str);
+ if (mixer_ctl_set_enum_by_string(ctl_sample_rate, rate_str) != 0) {
+ ALOGE("%s: Failed to reset backend sample rate = %s", __func__, rate_str);
return -ENOSYS;
}
ctl_sample_rate_tx = mixer_get_ctl_by_name(a2dp.adev->mixer,
- MIXER_SAMPLE_RATE_TX);
+ MIXER_SOURCE_SAMPLE_RATE_TX);
if (!ctl_sample_rate_tx) {
ALOGE("%s: ERROR Tx backend sample rate mixer control not identifed", __func__);
return -ENOSYS;
@@ -1032,28 +1279,34 @@
}
} else {
- ctl_sample_rate_rx = mixer_get_ctl_by_name(a2dp.adev->mixer,
+ ctl_sample_rate = mixer_get_ctl_by_name(a2dp.adev->mixer,
MIXER_SAMPLE_RATE_DEFAULT);
- if (!ctl_sample_rate_rx) {
+ if (!ctl_sample_rate) {
ALOGE("%s: ERROR backend sample rate mixer control not identifed", __func__);
return -ENOSYS;
}
- if (mixer_ctl_set_enum_by_string(ctl_sample_rate_rx, rate_str) != 0) {
+ if (mixer_ctl_set_enum_by_string(ctl_sample_rate, rate_str) != 0) {
ALOGE("%s: Failed to reset backend sample rate = %s", __func__, rate_str);
return -ENOSYS;
}
}
// Reset AFE input channels
- ALOGD("%s: reset AFE input channels = %s", __func__, in_channels);
- ctrl_in_channels = mixer_get_ctl_by_name(a2dp.adev->mixer,
- MIXER_AFE_IN_CHANNELS);
- if (!ctrl_in_channels) {
+ if (direction == SINK) {
+ ALOGD("%s: reset afe sink channels =%s", __func__, channels);
+ ctrl_channels = mixer_get_ctl_by_name(a2dp.adev->mixer,
+ MIXER_AFE_SINK_CHANNELS);
+ } else {
+ ALOGD("%s: reset afe source channels =%s", __func__, channels);
+ ctrl_channels = mixer_get_ctl_by_name(a2dp.adev->mixer,
+ MIXER_AFE_IN_CHANNELS);
+ }
+ if (!ctrl_channels) {
ALOGE("%s: ERROR AFE input channels mixer control not identifed", __func__);
return -ENOSYS;
}
- if (mixer_ctl_set_enum_by_string(ctrl_in_channels, in_channels) != 0) {
+ if (mixer_ctl_set_enum_by_string(ctrl_channels, channels) != 0) {
ALOGE("%s: Failed to reset AFE in channels = %d", __func__, a2dp.enc_channels);
return -ENOSYS;
}
@@ -1062,14 +1315,14 @@
}
/* API to configure AFE decoder in DSP */
-static bool configure_a2dp_decoder_format(int dec_format)
+static bool configure_a2dp_source_decoder_format(int dec_format)
{
struct mixer_ctl *ctl_dec_data = NULL;
struct abr_dec_cfg_t dec_cfg;
int ret = 0;
if (a2dp.abr_config.is_abr_enabled) {
- ctl_dec_data = mixer_get_ctl_by_name(a2dp.adev->mixer, MIXER_DEC_CONFIG_BLOCK);
+ ctl_dec_data = mixer_get_ctl_by_name(a2dp.adev->mixer, MIXER_SOURCE_DEC_CONFIG_BLOCK);
if (!ctl_dec_data) {
ALOGE("%s: ERROR A2DP codec config data mixer control not identifed", __func__);
return false;
@@ -1087,9 +1340,103 @@
ALOGE("%s: Failed to set decoder config", __func__);
return false;
}
+ }
+
+ return true;
+}
+
+bool configure_sbc_dec_format(audio_sbc_dec_config_t *sbc_bt_cfg)
+{
+ struct mixer_ctl *ctl_dec_data = NULL, *ctrl_bit_format = NULL;
+ struct sbc_dec_cfg_t sbc_dsp_cfg;
+ bool is_configured = false;
+ int ret = 0;
+
+ if(sbc_bt_cfg == NULL)
+ goto fail;
+
+ ctl_dec_data = mixer_get_ctl_by_name(a2dp.adev->mixer, MIXER_SINK_DEC_CONFIG_BLOCK);
+ if (!ctl_dec_data) {
+ ALOGE(" ERROR a2dp decoder CONFIG data mixer control not identified");
+ is_configured = false;
+ goto fail;
}
- return true;
+ memset(&sbc_dsp_cfg, 0x0, sizeof(struct sbc_dec_cfg_t));
+ sbc_dsp_cfg.dec_format = MEDIA_FMT_SBC;
+ sbc_dsp_cfg.data.channels = sbc_bt_cfg->channels;
+ sbc_dsp_cfg.data.sampling_rate = sbc_bt_cfg->sampling_rate;
+ ret = mixer_ctl_set_array(ctl_dec_data, (void *)&sbc_dsp_cfg,
+ sizeof(struct sbc_dec_cfg_t));
+
+ if (ret != 0) {
+ ALOGE("%s: failed to set SBC decoder config", __func__);
+ is_configured = false;
+ goto fail;
+ }
+
+ ctrl_bit_format = mixer_get_ctl_by_name(a2dp.adev->mixer,
+ MIXER_DEC_BIT_FORMAT);
+ if (!ctrl_bit_format) {
+ ALOGE(" ERROR Dec bit format mixer control not identified");
+ 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 decoder", __func__);
+ is_configured = false;
+ goto fail;
+ }
+
+ is_configured = true;
+ a2dp.bt_decoder_format = CODEC_TYPE_SBC;
+ if (sbc_dsp_cfg.data.channels == MEDIA_FMT_SBC_CHANNEL_MODE_MONO)
+ a2dp.dec_channels = 1;
+ else
+ a2dp.dec_channels = 2;
+ a2dp.dec_sampling_rate = sbc_dsp_cfg.data.sampling_rate;
+ ALOGV("Successfully updated SBC dec format");
+fail:
+ return is_configured;
+}
+
+/* API to configure AFE decoder in DSP */
+static bool configure_a2dp_sink_decoder_format()
+{
+ void *codec_info = NULL;
+ codec_t codec_type = CODEC_TYPE_INVALID;
+ bool is_configured = false;
+ struct mixer_ctl *ctl_dec_data = NULL;
+
+ if (!a2dp.audio_get_dec_config) {
+ ALOGE(" a2dp handle is not identified, ignoring a2dp decoder config");
+ return false;
+ }
+
+ ctl_dec_data = mixer_get_ctl_by_name(a2dp.adev->mixer, MIXER_SINK_DEC_CONFIG_BLOCK);
+ if (!ctl_dec_data) {
+ ALOGE(" ERROR a2dp decoder CONFIG data mixer control not identified");
+ is_configured = false;
+ return false;
+ }
+ codec_info = a2dp.audio_get_dec_config(&codec_type);
+ switch(codec_type) {
+ case CODEC_TYPE_SBC:
+ ALOGD(" SBC decoder supported BT device");
+ is_configured = configure_sbc_dec_format((audio_sbc_dec_config_t *)codec_info);
+ break;
+ case CODEC_TYPE_AAC:
+ ALOGD(" AAC decoder supported BT device");
+ is_configured =
+ configure_aac_dec_format((audio_aac_dec_config_t *)codec_info);
+ break;
+ default:
+ ALOGD(" Received Unsupported decoder format");
+ is_configured = false;
+ break;
+ }
+ return is_configured;
}
/* API to configure SBC DSP encoder */
@@ -1105,12 +1452,12 @@
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");
+ ALOGE(" ERROR a2dp encoder CONFIG data mixer control not identified");
is_configured = false;
goto fail;
}
memset(&sbc_dsp_cfg, 0x0, sizeof(struct sbc_enc_cfg_t));
- sbc_dsp_cfg.enc_format = ENC_MEDIA_FMT_SBC;
+ sbc_dsp_cfg.enc_format = MEDIA_FMT_SBC;
sbc_dsp_cfg.num_subbands = sbc_bt_cfg->subband;
sbc_dsp_cfg.blk_len = sbc_bt_cfg->blk_len;
switch(sbc_bt_cfg->channels) {
@@ -1147,7 +1494,7 @@
goto fail;
}
is_configured = true;
- a2dp.bt_encoder_format = ENC_CODEC_TYPE_SBC;
+ a2dp.bt_encoder_format = CODEC_TYPE_SBC;
a2dp.enc_sampling_rate = sbc_bt_cfg->sampling_rate;
if (sbc_dsp_cfg.channel_mode == MEDIA_FMT_SBC_CHANNEL_MODE_MONO)
@@ -1174,7 +1521,7 @@
}
memset(aptx_dsp_cfg, 0x0, sizeof(struct aptx_ad_enc_cfg_t));
- aptx_dsp_cfg->custom_cfg.enc_format = ENC_MEDIA_FMT_APTX_AD;
+ aptx_dsp_cfg->custom_cfg.enc_format = MEDIA_FMT_APTX_AD;
aptx_dsp_cfg->aptx_ad_cfg.sampling_freq = aptx_bt_cfg->ad_cfg->sampling_rate;
@@ -1262,7 +1609,7 @@
}
memset(aptx_dsp_cfg, 0x0, sizeof(struct aptx_enc_cfg_t));
- aptx_dsp_cfg->custom_cfg.enc_format = ENC_MEDIA_FMT_APTX;
+ aptx_dsp_cfg->custom_cfg.enc_format = MEDIA_FMT_APTX;
if (!a2dp.is_aptx_dual_mono_supported) {
aptx_dsp_cfg->custom_cfg.sample_rate = aptx_bt_cfg->default_cfg->sampling_rate;
@@ -1319,7 +1666,7 @@
}
memset(&aptx_dsp_cfg, 0x0, sizeof(struct custom_enc_cfg_t));
- aptx_dsp_cfg->enc_format = ENC_MEDIA_FMT_APTX;
+ aptx_dsp_cfg->enc_format = MEDIA_FMT_APTX;
aptx_dsp_cfg->sample_rate = aptx_bt_cfg->sampling_rate;
aptx_dsp_cfg->num_channels = aptx_bt_cfg->channels;
switch(aptx_dsp_cfg->num_channels) {
@@ -1413,9 +1760,9 @@
}
is_configured = true;
if (a2dp.is_aptx_adaptive)
- a2dp.bt_encoder_format = ENC_CODEC_TYPE_APTX_AD;
+ a2dp.bt_encoder_format = CODEC_TYPE_APTX_AD;
else
- a2dp.bt_encoder_format = ENC_CODEC_TYPE_APTX;
+ a2dp.bt_encoder_format = CODEC_TYPE_APTX;
fail:
/*restore sample rate */
if(!is_configured)
@@ -1441,13 +1788,13 @@
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");
+ ALOGE(" ERROR a2dp encoder CONFIG data mixer control not identified");
is_configured = false;
goto fail;
}
memset(&aptx_dsp_cfg, 0x0, sizeof(struct custom_enc_cfg_t));
- aptx_dsp_cfg.enc_format = ENC_MEDIA_FMT_APTX_HD;
+ aptx_dsp_cfg.enc_format = MEDIA_FMT_APTX_HD;
aptx_dsp_cfg.sample_rate = aptx_bt_cfg->sampling_rate;
aptx_dsp_cfg.num_channels = aptx_bt_cfg->channels;
switch(aptx_dsp_cfg.num_channels) {
@@ -1473,7 +1820,7 @@
goto fail;
}
is_configured = true;
- a2dp.bt_encoder_format = ENC_CODEC_TYPE_APTX_HD;
+ a2dp.bt_encoder_format = CODEC_TYPE_APTX_HD;
a2dp.enc_sampling_rate = aptx_bt_cfg->sampling_rate;
a2dp.enc_channels = aptx_bt_cfg->channels;
ALOGV("Successfully updated APTX HD encformat with samplingrate: %d channels:%d",
@@ -1495,12 +1842,12 @@
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");
+ ALOGE(" ERROR a2dp encoder CONFIG data mixer control not identified");
is_configured = false;
goto fail;
}
memset(&aac_dsp_cfg, 0x0, sizeof(struct aac_enc_cfg_t));
- aac_dsp_cfg.enc_format = ENC_MEDIA_FMT_AAC;
+ aac_dsp_cfg.enc_format = MEDIA_FMT_AAC;
aac_dsp_cfg.bit_rate = aac_bt_cfg->bitrate;
aac_dsp_cfg.sample_rate = aac_bt_cfg->sampling_rate;
switch (aac_bt_cfg->enc_mode) {
@@ -1531,7 +1878,7 @@
goto fail;
}
is_configured = true;
- a2dp.bt_encoder_format = ENC_CODEC_TYPE_AAC;
+ a2dp.bt_encoder_format = CODEC_TYPE_AAC;
a2dp.enc_sampling_rate = aac_bt_cfg->sampling_rate;
a2dp.enc_channels = aac_bt_cfg->channels;
ALOGV("%s: Successfully updated AAC enc format with sampling rate: %d channels:%d",
@@ -1557,7 +1904,7 @@
goto fail;
}
memset(&aac_dsp_cfg, 0x0, sizeof(struct aac_enc_cfg_v2_t));
- aac_dsp_cfg.aac_enc_cfg.enc_format = ENC_MEDIA_FMT_AAC;
+ aac_dsp_cfg.aac_enc_cfg.enc_format = MEDIA_FMT_AAC;
aac_dsp_cfg.aac_enc_cfg.bit_rate = aac_bt_cfg->audio_aac_enc_cfg.bitrate;
aac_dsp_cfg.aac_enc_cfg.sample_rate = aac_bt_cfg->audio_aac_enc_cfg.sampling_rate;
switch (aac_bt_cfg->audio_aac_enc_cfg.enc_mode) {
@@ -1590,7 +1937,7 @@
goto fail;
}
is_configured = true;
- a2dp.bt_encoder_format = ENC_CODEC_TYPE_AAC;
+ a2dp.bt_encoder_format = CODEC_TYPE_AAC;
a2dp.enc_sampling_rate = aac_bt_cfg->audio_aac_enc_cfg.sampling_rate;
a2dp.enc_channels = aac_bt_cfg->audio_aac_enc_cfg.channels;
ALOGV("%s: Successfully updated AAC enc format with sampling rate: %d channels:%d",
@@ -1610,13 +1957,13 @@
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");
+ ALOGE(" ERROR a2dp encoder CONFIG data mixer control not identified");
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.enc_format = 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) {
@@ -1651,7 +1998,7 @@
goto fail;
}
is_configured = true;
- a2dp.bt_encoder_format = ENC_CODEC_TYPE_CELT;
+ a2dp.bt_encoder_format = CODEC_TYPE_CELT;
a2dp.enc_sampling_rate = celt_bt_cfg->sampling_rate;
a2dp.enc_channels = celt_bt_cfg->channels;
ALOGV("Successfully updated CELT encformat with samplingrate: %d channels:%d",
@@ -1671,13 +2018,13 @@
ldac_enc_data = mixer_get_ctl_by_name(a2dp.adev->mixer, MIXER_ENC_CONFIG_BLOCK);
if (!ldac_enc_data) {
- ALOGE(" ERROR a2dp encoder CONFIG data mixer control not identifed");
+ ALOGE(" ERROR a2dp encoder CONFIG data mixer control not identified");
is_configured = false;
goto fail;
}
memset(&ldac_dsp_cfg, 0x0, sizeof(struct ldac_enc_cfg_t));
- ldac_dsp_cfg.custom_cfg.enc_format = ENC_MEDIA_FMT_LDAC;
+ ldac_dsp_cfg.custom_cfg.enc_format = MEDIA_FMT_LDAC;
ldac_dsp_cfg.custom_cfg.sample_rate = ldac_bt_cfg->sampling_rate;
ldac_dsp_cfg.ldac_cfg.channel_mode = ldac_bt_cfg->channel_mode;
switch(ldac_dsp_cfg.ldac_cfg.channel_mode) {
@@ -1719,7 +2066,7 @@
goto fail;
}
is_configured = true;
- a2dp.bt_encoder_format = ENC_CODEC_TYPE_LDAC;
+ a2dp.bt_encoder_format = CODEC_TYPE_LDAC;
a2dp.enc_sampling_rate = ldac_bt_cfg->sampling_rate;
a2dp.enc_channels = ldac_dsp_cfg.custom_cfg.num_channels;
a2dp.abr_config.is_abr_enabled = ldac_bt_cfg->is_abr_enabled;
@@ -1733,16 +2080,16 @@
{
void *codec_info = NULL;
uint8_t multi_cast = 0, num_dev = 1;
- enc_codec_t codec_type = ENC_CODEC_TYPE_INVALID;
+ codec_t codec_type = CODEC_TYPE_INVALID;
bool is_configured = false;
audio_aptx_encoder_config aptx_encoder_cfg;
- if (!a2dp.audio_get_codec_config) {
+ if (!a2dp.audio_get_enc_config) {
ALOGE(" a2dp handle is not identified, ignoring a2dp encoder config");
return false;
}
ALOGD("configure_a2dp_encoder_format start");
- codec_info = a2dp.audio_get_codec_config(&multi_cast, &num_dev,
+ codec_info = a2dp.audio_get_enc_config(&multi_cast, &num_dev,
&codec_type);
// ABR disabled by default for all codecs
@@ -1750,12 +2097,12 @@
a2dp.is_aptx_adaptive = false;
switch(codec_type) {
- case ENC_CODEC_TYPE_SBC:
+ case CODEC_TYPE_SBC:
ALOGD(" Received SBC encoder supported BT device");
is_configured =
configure_sbc_enc_format((audio_sbc_encoder_config *)codec_info);
break;
- case ENC_CODEC_TYPE_APTX:
+ case CODEC_TYPE_APTX:
ALOGD(" Received APTX encoder supported BT device");
#ifndef LINUX_ENABLED
a2dp.is_aptx_dual_mono_supported = false;
@@ -1764,7 +2111,7 @@
is_configured =
configure_aptx_enc_format(&aptx_encoder_cfg);
break;
- case ENC_CODEC_TYPE_APTX_HD:
+ case CODEC_TYPE_APTX_HD:
ALOGD(" Received APTX HD encoder supported BT device");
#ifndef LINUX_ENABLED
is_configured =
@@ -1775,7 +2122,7 @@
#endif
break;
#ifndef LINUX_ENABLED
- case ENC_CODEC_TYPE_APTX_DUAL_MONO:
+ case CODEC_TYPE_APTX_DUAL_MONO:
ALOGD(" Received APTX dual mono encoder supported BT device");
a2dp.is_aptx_dual_mono_supported = true;
if (a2dp.audio_is_tws_mono_mode_enable != NULL)
@@ -1785,7 +2132,7 @@
configure_aptx_enc_format(&aptx_encoder_cfg);
break;
#endif
- case ENC_CODEC_TYPE_AAC:
+ case CODEC_TYPE_AAC:
ALOGD(" Received AAC encoder supported BT device");
bool is_aac_frame_ctl_enabled =
property_get_bool("persist.vendor.bt.aac_frm_ctl.enabled", false);
@@ -1793,22 +2140,22 @@
configure_aac_enc_format_v2((audio_aac_encoder_config_v2 *) codec_info) :
configure_aac_enc_format((audio_aac_encoder_config *) codec_info);
break;
- case ENC_CODEC_TYPE_CELT:
+ case CODEC_TYPE_CELT:
ALOGD(" Received CELT encoder supported BT device");
is_configured =
configure_celt_enc_format((audio_celt_encoder_config *)codec_info);
break;
- case ENC_CODEC_TYPE_LDAC:
+ case CODEC_TYPE_LDAC:
ALOGD(" Received LDAC encoder supported BT device");
if (!instance_id || instance_id > MAX_INSTANCE_ID)
instance_id = MAX_INSTANCE_ID;
a2dp.abr_config.imc_instance = instance_id--;
is_configured =
(configure_ldac_enc_format((audio_ldac_encoder_config *)codec_info) &&
- configure_a2dp_decoder_format(ENC_CODEC_TYPE_LDAC));
+ configure_a2dp_source_decoder_format(CODEC_TYPE_LDAC));
break;
#ifndef LINUX_ENABLED //Temporarily disabled for LE, need to take care while doing VT FR
- case ENC_CODEC_TYPE_APTX_AD:
+ case CODEC_TYPE_APTX_AD:
ALOGD(" Received APTX AD encoder supported BT device");
if (!instance_id || instance_id > MAX_INSTANCE_ID)
instance_id = MAX_INSTANCE_ID;
@@ -1818,7 +2165,7 @@
aptx_encoder_cfg.ad_cfg = (audio_aptx_ad_config *)codec_info;
is_configured =
(configure_aptx_enc_format(&aptx_encoder_cfg) &&
- configure_a2dp_decoder_format(ENC_MEDIA_FMT_APTX_AD));
+ configure_a2dp_source_decoder_format(MEDIA_FMT_APTX_AD));
break;
#endif
default:
@@ -1835,49 +2182,135 @@
ALOGD("audio_extn_a2dp_start_playback start");
- if(!(a2dp.bt_lib_handle && a2dp.audio_start_stream
- && a2dp.audio_get_codec_config)) {
- ALOGE("a2dp handle is not identified, Ignoring start request");
+ if(!(a2dp.bt_lib_source_handle && a2dp.audio_source_start
+ && a2dp.audio_get_enc_config)) {
+ ALOGE("a2dp handle is not identified, Ignoring start playback request");
return -ENOSYS;
}
- if(a2dp.a2dp_suspended == true) {
+ if(a2dp.a2dp_source_suspended == true) {
//session will be restarted after suspend completion
ALOGD("a2dp start requested during suspend state");
return -ENOSYS;
}
- if (!a2dp.a2dp_started && !a2dp.a2dp_total_active_session_request) {
+ if (!a2dp.a2dp_source_started && !a2dp.a2dp_source_total_active_session_requests) {
ALOGD("calling BT module stream start");
/* This call indicates BT IPC lib to start playback */
- ret = a2dp.audio_start_stream();
+ ret = a2dp.audio_source_start();
ALOGE("BT controller start return = %d",ret);
if (ret != 0 ) {
ALOGE("BT controller start failed");
- a2dp.a2dp_started = false;
+ a2dp.a2dp_source_started = false;
} else {
if(configure_a2dp_encoder_format() == true) {
- a2dp.a2dp_started = true;
+ a2dp.a2dp_source_started = true;
ret = 0;
ALOGD("Start playback successful to BT library");
} else {
ALOGD(" unable to configure DSP encoder");
- a2dp.a2dp_started = false;
+ a2dp.a2dp_source_started = false;
ret = -ETIMEDOUT;
}
}
}
- if (a2dp.a2dp_started) {
- a2dp.a2dp_total_active_session_request++;
+ if (a2dp.a2dp_source_started) {
+ a2dp.a2dp_source_total_active_session_requests++;
a2dp_check_and_set_scrambler();
- a2dp_set_backend_cfg();
+ a2dp_set_backend_cfg(SOURCE);
if (a2dp.abr_config.is_abr_enabled)
start_abr();
}
ALOGD("start A2DP playback total active sessions :%d",
- a2dp.a2dp_total_active_session_request);
+ a2dp.a2dp_source_total_active_session_requests);
+ return ret;
+}
+
+uint64_t audio_extn_a2dp_get_decoder_latency()
+{
+ uint32_t latency = 0;
+
+ switch(a2dp.bt_decoder_format) {
+ case CODEC_TYPE_SBC:
+ latency = DEFAULT_SINK_LATENCY_SBC;
+ break;
+ case CODEC_TYPE_AAC:
+ latency = DEFAULT_SINK_LATENCY_AAC;
+ break;
+ default:
+ latency = 200;
+ ALOGD("No valid decoder defined, setting latency to %dms", latency);
+ break;
+ }
+ return (uint64_t)latency;
+}
+
+bool a2dp_send_sink_setup_complete(void) {
+ uint64_t system_latency = 0;
+ bool is_complete = false;
+
+ system_latency = audio_extn_a2dp_get_decoder_latency();
+
+ if (a2dp.audio_sink_session_setup_complete(system_latency) == 0) {
+ is_complete = true;
+ }
+ return is_complete;
+}
+
+int audio_extn_a2dp_start_capture()
+{
+ int ret = 0;
+
+ ALOGD("audio_extn_a2dp_start_capture start");
+
+ if(!(a2dp.bt_lib_sink_handle && a2dp.audio_sink_start
+ && a2dp.audio_get_dec_config)) {
+ ALOGE("a2dp handle is not identified, Ignoring start capture request");
+ return -ENOSYS;
+ }
+
+ if (!a2dp.a2dp_sink_started && !a2dp.a2dp_sink_total_active_session_requests) {
+ ALOGD("calling BT module stream start");
+ /* This call indicates BT IPC lib to start capture */
+ ret = a2dp.audio_sink_start();
+ ALOGE("BT controller start capture return = %d",ret);
+ if (ret != 0 ) {
+ ALOGE("BT controller start capture failed");
+ a2dp.a2dp_sink_started = false;
+ } else {
+
+ if(!audio_extn_a2dp_sink_is_ready()) {
+ ALOGD("Wait for capture ready not successful");
+ ret = -ETIMEDOUT;
+ }
+
+ if(configure_a2dp_sink_decoder_format() == true) {
+ a2dp.a2dp_sink_started = true;
+ ret = 0;
+ ALOGD("Start capture successful to BT library");
+ } else {
+ ALOGD(" unable to configure DSP decoder");
+ a2dp.a2dp_sink_started = false;
+ ret = -ETIMEDOUT;
+ }
+
+ if (!a2dp_send_sink_setup_complete()) {
+ ALOGD("sink_setup_complete not successful");
+ ret = -ETIMEDOUT;
+ }
+ }
+ }
+
+ if (a2dp.a2dp_sink_started) {
+ if (a2dp_set_backend_cfg(SINK) == true) {
+ a2dp.a2dp_sink_total_active_session_requests++;
+ }
+ }
+
+ ALOGD("start A2DP sink total active sessions :%d",
+ a2dp.a2dp_sink_total_active_session_requests);
return ret;
}
@@ -1893,16 +2326,16 @@
ctl_enc_config = mixer_get_ctl_by_name(a2dp.adev->mixer,
MIXER_ENC_CONFIG_BLOCK);
if (!ctl_enc_config) {
- ALOGE(" ERROR a2dp encoder format mixer control not identifed");
+ ALOGE(" ERROR a2dp encoder format mixer control not identified");
} else {
ret = mixer_ctl_set_array(ctl_enc_config, (void *)&dummy_reset_config,
sizeof(struct sbc_enc_cfg_t));
- a2dp.bt_encoder_format = ENC_MEDIA_FMT_NONE;
+ a2dp.bt_encoder_format = MEDIA_FMT_NONE;
}
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");
+ ALOGE(" ERROR bit format CONFIG data mixer control not identified");
} else {
ret = mixer_ctl_set_enum_by_string(ctrl_bit_format, "S16_LE");
if (ret != 0) {
@@ -1922,14 +2355,14 @@
}
}
-static int reset_a2dp_dec_config_params()
+static int reset_a2dp_source_dec_config_params()
{
struct mixer_ctl *ctl_dec_data = NULL;
struct abr_dec_cfg_t dummy_reset_cfg;
int ret = 0;
if (a2dp.abr_config.is_abr_enabled) {
- ctl_dec_data = mixer_get_ctl_by_name(a2dp.adev->mixer, MIXER_DEC_CONFIG_BLOCK);
+ ctl_dec_data = mixer_get_ctl_by_name(a2dp.adev->mixer, MIXER_SOURCE_DEC_CONFIG_BLOCK);
if (!ctl_dec_data) {
ALOGE("%s: ERROR A2DP decoder config mixer control not identifed", __func__);
return -EINVAL;
@@ -1946,38 +2379,98 @@
return ret;
}
+static void reset_a2dp_sink_dec_config_params()
+{
+ int ret =0;
+
+ struct mixer_ctl *ctl_dec_config, *ctrl_bit_format;
+ struct aac_dec_cfg_t dummy_reset_config;
+
+ memset(&dummy_reset_config, 0x0, sizeof(struct aac_dec_cfg_t));
+ ctl_dec_config = mixer_get_ctl_by_name(a2dp.adev->mixer,
+ MIXER_SINK_DEC_CONFIG_BLOCK);
+ if (!ctl_dec_config) {
+ ALOGE(" ERROR a2dp decoder format mixer control not identified");
+ } else {
+ ret = mixer_ctl_set_array(ctl_dec_config, (void *)&dummy_reset_config,
+ sizeof(struct aac_dec_cfg_t));
+ a2dp.bt_decoder_format = MEDIA_FMT_NONE;
+ }
+ ctrl_bit_format = mixer_get_ctl_by_name(a2dp.adev->mixer,
+ MIXER_DEC_BIT_FORMAT);
+ if (!ctrl_bit_format) {
+ ALOGE(" ERROR bit format CONFIG data mixer control not identified");
+ } else {
+ ret = mixer_ctl_set_enum_by_string(ctrl_bit_format, "S16_LE");
+ if (ret != 0) {
+ ALOGE("%s: Failed to set bit format to decoder", __func__);
+ }
+ }
+}
+
int audio_extn_a2dp_stop_playback()
{
int ret =0;
ALOGV("audio_extn_a2dp_stop_playback start");
- if(!(a2dp.bt_lib_handle && a2dp.audio_stop_stream)) {
- ALOGE("a2dp handle is not identified, Ignoring start request");
+ if(!(a2dp.bt_lib_source_handle && a2dp.audio_source_stop)) {
+ ALOGE("a2dp handle is not identified, Ignoring stop request");
return -ENOSYS;
}
- if (a2dp.a2dp_total_active_session_request > 0)
- a2dp.a2dp_total_active_session_request--;
+ if (a2dp.a2dp_source_total_active_session_requests > 0)
+ a2dp.a2dp_source_total_active_session_requests--;
- if ( a2dp.a2dp_started && !a2dp.a2dp_total_active_session_request) {
+ if ( a2dp.a2dp_source_started && !a2dp.a2dp_source_total_active_session_requests) {
ALOGV("calling BT module stream stop");
- ret = a2dp.audio_stop_stream();
+ ret = a2dp.audio_source_stop();
if (ret < 0)
ALOGE("stop stream to BT IPC lib failed");
else
ALOGV("stop steam to BT IPC lib successful");
reset_a2dp_enc_config_params();
- reset_a2dp_dec_config_params();
- a2dp_reset_backend_cfg();
+ reset_a2dp_source_dec_config_params();
+ a2dp_reset_backend_cfg(SOURCE);
if (a2dp.abr_config.is_abr_enabled && a2dp.abr_config.abr_started)
stop_abr();
a2dp.abr_config.is_abr_enabled = false;
- a2dp.a2dp_started = false;
+ a2dp.a2dp_source_started = false;
+ a2dp_reset_backend_cfg(SOURCE);
}
- if(!a2dp.a2dp_total_active_session_request)
- a2dp.a2dp_started = false;
- ALOGD("Stop A2DP playback total active sessions :%d",
- a2dp.a2dp_total_active_session_request);
+ if(!a2dp.a2dp_source_total_active_session_requests)
+ a2dp.a2dp_source_started = false;
+ ALOGD("Stop A2DP playback, total active sessions :%d",
+ a2dp.a2dp_source_total_active_session_requests);
+ return 0;
+}
+
+int audio_extn_a2dp_stop_capture()
+{
+ int ret =0;
+
+ ALOGV("audio_extn_a2dp_stop_capture start");
+ if(!(a2dp.bt_lib_sink_handle && a2dp.audio_sink_stop)) {
+ ALOGE("a2dp handle is not identified, Ignoring stop request");
+ return -ENOSYS;
+ }
+
+ if (a2dp.a2dp_sink_total_active_session_requests > 0)
+ a2dp.a2dp_sink_total_active_session_requests--;
+
+ if ( a2dp.a2dp_sink_started && !a2dp.a2dp_sink_total_active_session_requests) {
+ ALOGV("calling BT module stream stop");
+ ret = a2dp.audio_sink_stop();
+ if (ret < 0)
+ ALOGE("stop stream to BT IPC lib failed");
+ else
+ ALOGV("stop steam to BT IPC lib successful");
+ reset_a2dp_sink_dec_config_params();
+ a2dp_reset_backend_cfg(SINK);
+ }
+ if(!a2dp.a2dp_sink_total_active_session_requests)
+ a2dp.a2dp_source_started = false;
+ ALOGD("Stop A2DP capture, total active sessions :%d",
+ a2dp.a2dp_sink_total_active_session_requests);
return 0;
}
@@ -1989,7 +2482,7 @@
struct listnode *node;
if(a2dp.is_a2dp_offload_supported == false) {
- ALOGV("no supported encoders identified,ignoring a2dp setparam");
+ ALOGV("no supported codecs identified,ignoring a2dp setparam");
return;
}
@@ -1998,8 +2491,8 @@
if (ret >= 0) {
val = atoi(value);
if (audio_is_a2dp_out_device(val)) {
- ALOGV("Received device connect request for A2DP");
- open_a2dp_output();
+ ALOGV("Received device connect request for A2DP source");
+ open_a2dp_source();
}
goto param_handled;
}
@@ -2010,15 +2503,20 @@
if (ret >= 0) {
val = atoi(value);
if (audio_is_a2dp_out_device(val)) {
- ALOGV("Received device dis- connect request");
- reset_a2dp_enc_config_params();
- reset_a2dp_dec_config_params();
+ ALOGV("Received source device dis- connect request");
close_a2dp_output();
- a2dp_reset_backend_cfg();
+ reset_a2dp_enc_config_params();
+ reset_a2dp_source_dec_config_params();
+ a2dp_reset_backend_cfg(SOURCE);
+ } else if (audio_is_a2dp_in_device(val)) {
+ ALOGV("Received sink device dis- connect request");
+ close_a2dp_input();
+ reset_a2dp_sink_dec_config_params();
+ a2dp_reset_backend_cfg(SINK);
}
goto param_handled;
}
-
+#ifndef LINUX_ENABLED
ret = str_parms_get_str(parms, "TwsChannelConfig", value, sizeof(value));
if (ret>=0) {
ALOGD("Setting tws channel mode to %s",value);
@@ -2029,14 +2527,14 @@
audio_a2dp_update_tws_channel_mode();
goto param_handled;
}
-
+#endif
ret = str_parms_get_str(parms, "A2dpSuspended", value, sizeof(value));
if (ret >= 0) {
- if (a2dp.bt_lib_handle) {
+ if (a2dp.bt_lib_source_handle) {
if ((!strncmp(value,"true",sizeof(value)))) {
ALOGD("Setting a2dp to suspend state");
- a2dp.a2dp_suspended = true;
- if (a2dp.bt_state == A2DP_STATE_DISCONNECTED)
+ a2dp.a2dp_source_suspended = true;
+ if (a2dp.bt_state_source == A2DP_STATE_DISCONNECTED)
goto param_handled;
list_for_each(node, &a2dp.adev->usecase_list) {
uc_info = node_to_item(node, struct audio_usecase, list);
@@ -2048,16 +2546,16 @@
}
}
reset_a2dp_enc_config_params();
- reset_a2dp_dec_config_params();
- if(a2dp.audio_suspend_stream)
- a2dp.audio_suspend_stream();
- } else if (a2dp.a2dp_suspended == true) {
+ reset_a2dp_source_dec_config_params();
+ if(a2dp.audio_source_suspend)
+ a2dp.audio_source_suspend();
+ } else if (a2dp.a2dp_source_suspended == true) {
ALOGD("Resetting a2dp suspend state");
struct audio_usecase *uc_info;
struct listnode *node;
- if(a2dp.clear_a2dpsuspend_flag)
- a2dp.clear_a2dpsuspend_flag();
- a2dp.a2dp_suspended = false;
+ if(a2dp.clear_source_a2dpsuspend_flag)
+ a2dp.clear_source_a2dpsuspend_flag();
+ a2dp.a2dp_source_suspended = false;
/*
* It is possible that before suspend,a2dp sessions can be active
* for example during music + voice activation concurrency
@@ -2069,13 +2567,13 @@
* Fix is to call a2dp start for IPC library post suspend
* based on number of active session count
*/
- if (a2dp.a2dp_total_active_session_request > 0) {
+ if (a2dp.a2dp_source_total_active_session_requests > 0) {
ALOGD(" Calling IPC lib start post suspend state");
- if(a2dp.audio_start_stream) {
- ret = a2dp.audio_start_stream();
+ if(a2dp.audio_source_start) {
+ ret = a2dp.audio_source_start();
if (ret != 0) {
ALOGE("BT controller start failed");
- a2dp.a2dp_started = false;
+ a2dp.a2dp_source_started = false;
}
}
}
@@ -2106,44 +2604,59 @@
//During encoder reconfiguration mode, force a2dp device switch
// Or if a2dp device is selected but earlier start failed ( as a2dp
// was suspended, force retry.
- return a2dp.is_handoff_in_progress || !a2dp.a2dp_started;
+ return a2dp.is_handoff_in_progress || !a2dp.a2dp_source_started;
}
-void audio_extn_a2dp_get_sample_rate(int *sample_rate)
+void audio_extn_a2dp_get_enc_sample_rate(int *sample_rate)
{
*sample_rate = a2dp.enc_sampling_rate;
}
-bool audio_extn_a2dp_is_ready()
+void audio_extn_a2dp_get_dec_sample_rate(int *sample_rate)
+{
+ *sample_rate = a2dp.dec_sampling_rate;
+}
+
+bool audio_extn_a2dp_source_is_ready()
{
bool ret = false;
- if (a2dp.a2dp_suspended)
+ if (a2dp.a2dp_source_suspended)
return ret;
- if ((a2dp.bt_state != A2DP_STATE_DISCONNECTED) &&
+ if ((a2dp.bt_state_source != A2DP_STATE_DISCONNECTED) &&
(a2dp.is_a2dp_offload_supported) &&
- (a2dp.audio_check_a2dp_ready))
- ret = a2dp.audio_check_a2dp_ready();
+ (a2dp.audio_source_check_a2dp_ready))
+ ret = a2dp.audio_source_check_a2dp_ready();
return ret;
}
-bool audio_extn_a2dp_is_suspended()
+bool audio_extn_a2dp_sink_is_ready()
{
- return a2dp.a2dp_suspended;
+ bool ret = false;
+
+ if ((a2dp.bt_state_sink != A2DP_STATE_DISCONNECTED) &&
+ (a2dp.is_a2dp_offload_supported) &&
+ (a2dp.audio_sink_check_a2dp_ready))
+ ret = a2dp.audio_sink_check_a2dp_ready();
+ return ret;
+}
+
+bool audio_extn_a2dp_source_is_suspended()
+{
+ return a2dp.a2dp_source_suspended;
}
void audio_extn_a2dp_init (void *adev)
{
a2dp.adev = (struct audio_device*)adev;
- a2dp.bt_lib_handle = NULL;
- a2dp.a2dp_started = false;
- a2dp.bt_state = A2DP_STATE_DISCONNECTED;
- a2dp.a2dp_total_active_session_request = 0;
- a2dp.a2dp_suspended = false;
- a2dp.bt_encoder_format = ENC_CODEC_TYPE_INVALID;
+ a2dp.bt_lib_source_handle = NULL;
+ a2dp.a2dp_source_started = false;
+ a2dp.bt_state_source = A2DP_STATE_DISCONNECTED;
+ a2dp.a2dp_source_total_active_session_requests = 0;
+ a2dp.a2dp_source_suspended = false;
+ a2dp.bt_encoder_format = CODEC_TYPE_INVALID;
a2dp.enc_sampling_rate = 48000;
- a2dp.is_a2dp_offload_supported = false;
a2dp.is_handoff_in_progress = false;
a2dp.is_aptx_dual_mono_supported = false;
a2dp.is_aptx_adaptive = false;
@@ -2153,7 +2666,16 @@
a2dp.abr_config.abr_tx_handle = NULL;
a2dp.is_tws_mono_mode_on = false;
reset_a2dp_enc_config_params();
- reset_a2dp_dec_config_params();
+ reset_a2dp_source_dec_config_params();
+ reset_a2dp_sink_dec_config_params();
+
+ a2dp.bt_lib_sink_handle = NULL;
+ a2dp.a2dp_sink_started = false;
+ a2dp.bt_state_sink = A2DP_STATE_DISCONNECTED;
+ a2dp.a2dp_sink_total_active_session_requests = 0;
+ open_a2dp_sink();
+
+ a2dp.is_a2dp_offload_supported = false;
update_offload_codec_capabilities();
}
@@ -2176,37 +2698,38 @@
}
uint32_t slatency = 0;
- if (a2dp.audio_get_a2dp_sink_latency && a2dp.bt_state != A2DP_STATE_DISCONNECTED) {
- slatency = a2dp.audio_get_a2dp_sink_latency();
+ if (a2dp.audio_sink_get_a2dp_latency && a2dp.bt_state_source != A2DP_STATE_DISCONNECTED) {
+ slatency = a2dp.audio_sink_get_a2dp_latency();
}
switch(a2dp.bt_encoder_format) {
- case ENC_CODEC_TYPE_SBC:
+ case CODEC_TYPE_SBC:
latency = (avsync_runtime_prop > 0) ? sbc_offset : ENCODER_LATENCY_SBC;
latency += (slatency <= 0) ? DEFAULT_SINK_LATENCY_SBC : slatency;
break;
- case ENC_CODEC_TYPE_APTX:
+ case CODEC_TYPE_APTX:
latency = (avsync_runtime_prop > 0) ? aptx_offset : ENCODER_LATENCY_APTX;
latency += (slatency <= 0) ? DEFAULT_SINK_LATENCY_APTX : slatency;
break;
- case ENC_CODEC_TYPE_APTX_HD:
+ case 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 ENC_CODEC_TYPE_AAC:
+ case 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:
+ case CODEC_TYPE_CELT:
latency = (avsync_runtime_prop > 0) ? celt_offset : ENCODER_LATENCY_CELT;
latency += (slatency <= 0) ? DEFAULT_SINK_LATENCY_CELT : slatency;
break;
- case ENC_CODEC_TYPE_LDAC:
+ case CODEC_TYPE_LDAC:
latency = (avsync_runtime_prop > 0) ? ldac_offset : ENCODER_LATENCY_LDAC;
latency += (slatency <= 0) ? DEFAULT_SINK_LATENCY_LDAC : slatency;
break;
- case ENC_CODEC_TYPE_APTX_AD: // for aptx adaptive the latency depends on the mode (HQ/LL) and
+ case CODEC_TYPE_APTX_AD: // for aptx adaptive the latency depends on the mode (HQ/LL) and
latency = slatency; // BT IPC will take care of accomodating the mode factor and return latency
+ break;
default:
latency = 200;
break;
diff --git a/hal/audio_extn/audio_extn.c b/hal/audio_extn/audio_extn.c
index f01bff1..2d2853d 100644
--- a/hal/audio_extn/audio_extn.c
+++ b/hal/audio_extn/audio_extn.c
@@ -971,6 +971,7 @@
audio_extn_source_track_get_parameters(adev, query, reply);
audio_extn_fbsp_get_parameters(query, reply);
audio_extn_sound_trigger_get_parameters(adev, query, reply);
+ audio_extn_fm_get_parameters(query, reply);
if (adev->offload_effects_get_parameters != NULL)
adev->offload_effects_get_parameters(query, reply);
audio_extn_ext_hw_plugin_get_parameters(adev->ext_hw_plugin, query, reply);
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index 9047cb3..ce04d85 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -293,10 +293,14 @@
#define audio_extn_a2dp_set_parameters(parms) (0)
#define audio_extn_a2dp_is_force_device_switch() (0)
#define audio_extn_a2dp_set_handoff_mode(is_on) (0)
-#define audio_extn_a2dp_get_sample_rate(sample_rate) (0)
+#define audio_extn_a2dp_get_enc_sample_rate(sample_rate) (0)
+#define audio_extn_a2dp_get_dec_sample_rate(sample_rate) (0)
#define audio_extn_a2dp_get_encoder_latency() (0)
-#define audio_extn_a2dp_is_ready() (0)
-#define audio_extn_a2dp_is_suspended() (0)
+#define audio_extn_a2dp_sink_is_ready() (0)
+#define audio_extn_a2dp_source_is_ready() (0)
+#define audio_extn_a2dp_source_is_suspended() (0)
+#define audio_extn_a2dp_start_capture() (0)
+#define audio_extn_a2dp_stop_capture() (0)
#else
void audio_extn_a2dp_init(void *adev);
int audio_extn_a2dp_start_playback();
@@ -304,10 +308,14 @@
void audio_extn_a2dp_set_parameters(struct str_parms *parms);
bool audio_extn_a2dp_is_force_device_switch();
void audio_extn_a2dp_set_handoff_mode(bool is_on);
-void audio_extn_a2dp_get_sample_rate(int *sample_rate);
+void audio_extn_a2dp_get_enc_sample_rate(int *sample_rate);
+void audio_extn_a2dp_get_dec_sample_rate(int *sample_rate);
uint32_t audio_extn_a2dp_get_encoder_latency();
-bool audio_extn_a2dp_is_ready();
-bool audio_extn_a2dp_is_suspended();
+bool audio_extn_a2dp_sink_is_ready();
+bool audio_extn_a2dp_source_is_ready();
+bool audio_extn_a2dp_source_is_suspended();
+int audio_extn_a2dp_start_capture();
+int audio_extn_a2dp_stop_capture();
#endif
#ifndef SSR_ENABLED
@@ -968,9 +976,11 @@
#ifndef FM_POWER_OPT
#define audio_extn_fm_set_parameters(adev, parms) (0)
+#define audio_extn_fm_get_parameters(query, reply) (0)
#else
void audio_extn_fm_set_parameters(struct audio_device *adev,
struct str_parms *parms);
+void audio_extn_fm_get_parameters(struct str_parms *query, struct str_parms *reply);
#endif
#ifndef APTX_DECODER_ENABLED
diff --git a/hal/audio_extn/fm.c b/hal/audio_extn/fm.c
index 49b36c6..f0b8b9a 100644
--- a/hal/audio_extn/fm.c
+++ b/hal/audio_extn/fm.c
@@ -45,6 +45,7 @@
#define AUDIO_PARAMETER_KEY_FM_MUTE "fm_mute"
#define AUDIO_PARAMETER_KEY_FM_RESTORE_VOLUME "fm_restore_volume"
#define AUDIO_PARAMETER_KEY_FM_ROUTING "fm_routing"
+#define AUDIO_PARAMETER_KEY_FM_STATUS "fm_status"
#define FM_LOOPBACK_DRAIN_TIME_MS 2
static struct pcm_config pcm_config_fm = {
@@ -251,6 +252,19 @@
return ret;
}
+void audio_extn_fm_get_parameters(struct str_parms *query, struct str_parms *reply)
+{
+ int ret, val;
+ char value[32]={0};
+
+ ALOGV("%s: enter", __func__);
+ ret = str_parms_get_str(query, AUDIO_PARAMETER_KEY_FM_STATUS, value, sizeof(value));
+ if (ret >= 0) {
+ val = (fmmod.is_fm_running ? 1: 0);
+ str_parms_add_int(reply, AUDIO_PARAMETER_KEY_FM_STATUS, val);
+ }
+}
+
void audio_extn_fm_set_parameters(struct audio_device *adev,
struct str_parms *parms)
{
diff --git a/hal/audio_extn/hw_loopback.c b/hal/audio_extn/hw_loopback.c
index c76319f..3d6525a 100644
--- a/hal/audio_extn/hw_loopback.c
+++ b/hal/audio_extn/hw_loopback.c
@@ -77,9 +77,9 @@
typedef struct loopback_patch {
audio_patch_handle_t patch_handle_id; /* patch unique ID */
struct audio_port_config loopback_source; /* Source port config */
- struct audio_port_config loopback_sink; /* Source port config */
+ struct audio_port_config loopback_sink; /* Sink port config */
struct compress *source_stream; /* Source stream */
- struct compress *sink_stream; /* Source stream */
+ struct compress *sink_stream; /* Sink stream */
struct stream_inout patch_stream; /* InOut type stream */
patch_state_t patch_state; /* Patch operation state */
} loopback_patch_t;
@@ -186,6 +186,8 @@
audio_devices_t source_device = loopback_patch->loopback_source.ext.device.type;
audio_devices_t sink_device = loopback_patch->loopback_sink.ext.device.type;
+ source_device &= ~AUDIO_DEVICE_BIT_IN;
+
if (loopback_patch->patch_handle_id != PATCH_HANDLE_INVALID) {
ALOGE("%s, Patch handle already exists", __func__);
return loopback_patch->patch_handle_id;
@@ -195,8 +197,11 @@
switch (loopback_patch->loopback_source.type) {
case AUDIO_PORT_TYPE_DEVICE :
if ((loopback_patch->loopback_source.config_mask & AUDIO_PORT_CONFIG_FORMAT)) {
- if ((loopback_patch->loopback_source.ext.device.type & AUDIO_DEVICE_IN_HDMI) ||
- (loopback_patch->loopback_source.ext.device.type & AUDIO_DEVICE_IN_SPDIF)) {
+ if ((source_device & AUDIO_DEVICE_IN_HDMI) ||
+ (source_device & AUDIO_DEVICE_IN_SPDIF) ||
+ (source_device & AUDIO_DEVICE_IN_BLUETOOTH_A2DP) ||
+ (source_device & AUDIO_DEVICE_IN_HDMI_ARC)) {
+
switch (loopback_patch->loopback_source.format) {
case AUDIO_FORMAT_PCM:
case AUDIO_FORMAT_PCM_16_BIT:
@@ -205,17 +210,21 @@
case AUDIO_FORMAT_IEC61937:
case AUDIO_FORMAT_AC3:
case AUDIO_FORMAT_E_AC3:
+ case AUDIO_FORMAT_AAC_LATM_LC:
+ case AUDIO_FORMAT_AAC_LATM_HE_V1:
+ case AUDIO_FORMAT_AAC_LATM_HE_V2:
+ case AUDIO_FORMAT_SBC:
is_source_supported = true;
break;
}
- } else if (loopback_patch->loopback_source.ext.device.type & AUDIO_DEVICE_IN_LINE) {
+ } else if (source_device & AUDIO_DEVICE_IN_LINE) {
is_source_supported = true;
}
}
break;
default :
- break;
- //Unsupported as of now, need to extend for other source types
+ //Unsupported as of now, need to extend for other source types
+ break;
}
}
@@ -241,14 +250,13 @@
}
break;
default :
- break;
//Unsupported as of now, need to extend for other sink types
+ break;
}
}
if (is_source_supported && is_sink_supported) {
- return source_device | sink_device;
+ return AUDIO_DEVICE_BIT_IN | source_device | sink_device;
}
-
ALOGE("%s, Unsupported source or sink port config", __func__);
return loopback_patch->patch_handle_id;
}
diff --git a/hal/audio_extn/spkr_protection.c b/hal/audio_extn/spkr_protection.c
index f084396..4067055 100644
--- a/hal/audio_extn/spkr_protection.c
+++ b/hal/audio_extn/spkr_protection.c
@@ -97,7 +97,11 @@
#define MAX_RESISTANCE_SPKR_Q24 (40 * (1 << 24))
/*Path where the calibration file will be stored*/
-#define CALIB_FILE "/data/vendor/audio/audio.cal"
+#ifdef LINUX_ENABLED
+#define CALIB_FILE "/data/audio/audio.cal"
+#else
+#define CALIB_FILE "/data/vendor/misc/audio/audio.cal"
+#endif
/*Time between retries for calibartion or intial wait time
after boot up*/
@@ -982,6 +986,7 @@
struct audio_device *adev = handle.adev_handle;
unsigned long min_idle_time = MIN_SPKR_IDLE_SEC;
char value[PROPERTY_VALUE_MAX];
+ char afe_version_value[PROPERTY_VALUE_MAX];
char wsa_path[MAX_PATH] = {0};
int spk_1_tzn, spk_2_tzn;
char buf[32] = {0};
@@ -1022,7 +1027,10 @@
}
spv3_enable = property_get_bool("persist.vendor.audio.spv3.enable", false);
- afe_api_version = property_get_int32("persist.vendor.audio.avs.afe_api_version", 0);
+ property_get("persist.vendor.audio.avs.afe_api_version", afe_version_value,
+ "0");
+ if (atoi(afe_version_value) > 0)
+ afe_api_version = atoi(afe_version_value);
fp = fopen(CALIB_FILE,"rb");
if (fp) {
diff --git a/hal/audio_extn/utils.c b/hal/audio_extn/utils.c
index 1af22c2..7c5756b 100644
--- a/hal/audio_extn/utils.c
+++ b/hal/audio_extn/utils.c
@@ -994,7 +994,14 @@
if (usecase->id == USECASE_AUDIO_PLAYBACK_VOIP) {
usecase->stream.out->app_type_cfg.sample_rate = usecase->stream.out->sample_rate;
} else if (usecase->stream.out->devices & AUDIO_DEVICE_OUT_SPEAKER) {
- usecase->stream.out->app_type_cfg.sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
+ if (platform_spkr_use_default_sample_rate(adev->platform)) {
+ usecase->stream.out->app_type_cfg.sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
+ } else {
+ platform_check_and_update_copp_sample_rate(adev->platform, snd_device,
+ usecase->stream.out->sample_rate,
+ &usecase->stream.out->app_type_cfg.sample_rate);
+ }
+
} else if ((snd_device == SND_DEVICE_OUT_HDMI ||
snd_device == SND_DEVICE_OUT_USB_HEADSET ||
snd_device == SND_DEVICE_OUT_DISPLAY_PORT) &&
@@ -1018,7 +1025,7 @@
* For a2dp playback get encoder sampling rate and set copp sampling rate,
* for bit width use the stream param only.
*/
- audio_extn_a2dp_get_sample_rate(&usecase->stream.out->app_type_cfg.sample_rate);
+ audio_extn_a2dp_get_enc_sample_rate(&usecase->stream.out->app_type_cfg.sample_rate);
ALOGI("%s using %d sample rate rate for A2DP CoPP",
__func__, usecase->stream.out->app_type_cfg.sample_rate);
}
@@ -1070,6 +1077,11 @@
} else {
audio_extn_btsco_get_sample_rate(snd_device, &usecase->stream.in->app_type_cfg.sample_rate);
}
+ if (usecase->stream.in->device & AUDIO_DEVICE_IN_BLUETOOTH_A2DP & ~AUDIO_DEVICE_BIT_IN) {
+ audio_extn_a2dp_get_dec_sample_rate(&usecase->stream.in->app_type_cfg.sample_rate);
+ ALOGI("%s using %d sample rate rate for A2DP dec CoPP",
+ __func__, usecase->stream.in->app_type_cfg.sample_rate);
+ }
sample_rate = usecase->stream.in->app_type_cfg.sample_rate;
app_type_cfg[len++] = sample_rate;
if (snd_device_be_idx > 0)
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 2f0ed58..f86c48f 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -1091,7 +1091,13 @@
if ((SND_DEVICE_OUT_BT_A2DP == snd_device) &&
(audio_extn_a2dp_start_playback() < 0)) {
- ALOGE(" fail to configure A2dp control path ");
+ ALOGE(" fail to configure A2dp Source control path ");
+ return -EINVAL;
+ }
+
+ if ((SND_DEVICE_IN_BT_A2DP == snd_device) &&
+ (audio_extn_a2dp_start_capture() < 0)) {
+ ALOGE(" fail to configure A2dp Sink control path ");
return -EINVAL;
}
@@ -1179,6 +1185,9 @@
if (SND_DEVICE_OUT_BT_A2DP == snd_device)
audio_extn_a2dp_stop_playback();
+ if (SND_DEVICE_IN_BT_A2DP == snd_device)
+ audio_extn_a2dp_stop_capture();
+
if (snd_device == SND_DEVICE_OUT_HDMI || snd_device == SND_DEVICE_OUT_DISPLAY_PORT)
adev->is_channel_status_set = false;
else if (SND_DEVICE_OUT_HEADPHONES == snd_device &&
@@ -1987,12 +1996,12 @@
audio_extn_a2dp_is_force_device_switch()) {
ALOGD("Force a2dp device switch to update new encoder config");
ret = true;
- }
+ }
- if (usecase->stream.out->stream_config_changed) {
+ if (usecase->stream.out->stream_config_changed) {
ALOGD("Force stream_config_changed to update iec61937 transmission config");
return true;
- }
+ }
return ret;
}
@@ -2199,7 +2208,7 @@
}
if ((is_btsco_device(out_snd_device,in_snd_device) && !adev->bt_sco_on) ||
- (is_a2dp_device(out_snd_device) && !audio_extn_a2dp_is_ready())) {
+ (is_a2dp_device(out_snd_device) && !audio_extn_a2dp_source_is_ready())) {
ALOGD("SCO/A2DP is selected but they are not connected/ready hence dont route");
return 0;
}
@@ -2233,7 +2242,7 @@
}
if ((out_snd_device == SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP) &&
- (!audio_extn_a2dp_is_ready())) {
+ (!audio_extn_a2dp_source_is_ready())) {
ALOGW("%s: A2DP profile is not ready, routing to speaker only", __func__);
out_snd_device = SND_DEVICE_OUT_SPEAKER;
}
@@ -3037,7 +3046,7 @@
}
if (out->devices & AUDIO_DEVICE_OUT_ALL_A2DP) {
- if (!audio_extn_a2dp_is_ready()) {
+ if (!audio_extn_a2dp_source_is_ready()) {
if (out->devices & AUDIO_DEVICE_OUT_SPEAKER) {
a2dp_combo = true;
} else {
@@ -3107,7 +3116,7 @@
}
if ((out->devices & AUDIO_DEVICE_OUT_ALL_A2DP) &&
- (!audio_extn_a2dp_is_ready())) {
+ (!audio_extn_a2dp_source_is_ready())) {
if (!a2dp_combo) {
check_a2dp_restore_l(adev, out, false);
} else {
@@ -3486,7 +3495,8 @@
bytes_per_period_sample = audio_bytes_per_sample(format) * channel_count;
size *= bytes_per_period_sample;
- /* make sure the size is multiple of 32 bytes
+ /* make sure the size is multiple of 32 bytes and additionally multiple of
+ * the frame_size (required for 24bit samples and non-power-of-2 channel counts)
* At 48 kHz mono 16-bit PCM:
* 5.000 ms = 240 frames = 15*16*1*2 = 480, a whole multiple of 32 (15)
* 3.333 ms = 160 frames = 10*16*1*2 = 320, a whole multiple of 32 (10)
@@ -3873,13 +3883,13 @@
/*
* When A2DP is disconnected the
* music playback is paused and the policy manager sends routing=0
- * But the audioflingercontinues to write data until standby time
+ * But the audioflinger continues to write data until standby time
* (3sec). As BT is turned off, the write gets blocked.
* Avoid this by routing audio to speaker until standby.
*/
if ((out->devices & AUDIO_DEVICE_OUT_ALL_A2DP) &&
(val == AUDIO_DEVICE_NONE) &&
- !audio_extn_a2dp_is_ready()) {
+ !audio_extn_a2dp_source_is_ready()) {
val = AUDIO_DEVICE_OUT_SPEAKER;
}
/*
@@ -3898,7 +3908,7 @@
* check with BT lib about a2dp streaming support before routing
*/
if (val & AUDIO_DEVICE_OUT_ALL_A2DP) {
- if (!audio_extn_a2dp_is_ready()) {
+ if (!audio_extn_a2dp_source_is_ready()) {
if (val & AUDIO_DEVICE_OUT_SPEAKER) {
//combo usecase just by pass a2dp
ALOGW("%s: A2DP profile is not ready,routing to speaker only", __func__);
@@ -4000,7 +4010,7 @@
}
if ((out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) &&
out->a2dp_compress_mute &&
- (!(out->devices & AUDIO_DEVICE_OUT_ALL_A2DP) || audio_extn_a2dp_is_ready())) {
+ (!(out->devices & AUDIO_DEVICE_OUT_ALL_A2DP) || audio_extn_a2dp_source_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);
@@ -4617,7 +4627,7 @@
}
if ((out->devices & AUDIO_DEVICE_OUT_ALL_A2DP) &&
- (audio_extn_a2dp_is_suspended())) {
+ (audio_extn_a2dp_source_is_suspended())) {
if (!(out->devices & AUDIO_DEVICE_OUT_SPEAKER)) {
if (!(out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD)) {
ret = -EIO;
@@ -4687,6 +4697,16 @@
audio_format_t dst_format = out->hal_op_format;
audio_format_t src_format = out->hal_ip_format;
+ /* prevent division-by-zero */
+ uint32_t bitwidth_src = format_to_bitwidth_table[src_format];
+ uint32_t bitwidth_dst = format_to_bitwidth_table[dst_format];
+ if ((bitwidth_src == 0) || (bitwidth_dst == 0)) {
+ ALOGE("%s: Error bitwidth == 0", __func__);
+ pthread_mutex_unlock(&out->lock);
+ ATRACE_END();
+ return -EINVAL;
+ }
+
uint32_t frames = bytes / format_to_bitwidth_table[src_format];
uint32_t bytes_to_write = frames * format_to_bitwidth_table[dst_format];
@@ -4853,10 +4873,18 @@
out->standby = true;
}
out_on_error(&out->stream.common);
- 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 (!(out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD)) {
+ /* prevent division-by-zero */
+ uint32_t stream_size = audio_stream_out_frame_size(stream);
+ uint32_t srate = out_get_sample_rate(&out->stream.common);
+ if ((stream_size == 0) || (srate == 0)) {
+ ALOGE("%s: stream_size= %d, srate = %d", __func__, stream_size, srate);
+ ATRACE_END();
+ return -EINVAL;
+ }
+ usleep((uint64_t)bytes * 1000000 / stream_size / srate);
+ }
if (audio_extn_passthru_is_passthrough_stream(out)) {
//ALOGE("%s: write error, ret = %zd", __func__, ret);
ATRACE_END();
@@ -7401,6 +7429,13 @@
config->format,
channel_count,
is_low_latency);
+ /* prevent division-by-zero */
+ if (frame_size == 0) {
+ ALOGE("%s: Error frame_size==0", __func__);
+ ret = -EINVAL;
+ goto err_open;
+ }
+
in->config.period_size = buffer_size / frame_size;
if (in->source == AUDIO_SOURCE_VOICE_COMMUNICATION) {
diff --git a/hal/edid.h b/hal/edid.h
index f97d0e3..a7578e6 100644
--- a/hal/edid.h
+++ b/hal/edid.h
@@ -57,15 +57,17 @@
#define PCM_CHANNEL_FRC 14 /* Front right of center. */
#define PCM_CHANNEL_RLC 15 /* Rear left of center. */
#define PCM_CHANNEL_RRC 16 /* Rear right of center. */
-#define PCM_CHANNEL_LFE2 17 /* Rear right of center. */
+#define PCM_CHANNEL_LFE2 17 /* Second low frequency channel. */
#define PCM_CHANNEL_SL 18 /* Side left channel. */
-#define PCM_CHANNEL_SR 19 /* Side right channel */
+#define PCM_CHANNEL_SR 19 /* Side right channel. */
#define PCM_CHANNEL_TFL 20 /* Top front left channel. */
+#define PCM_CHANNEL_LVH 20 /* Left vertical height channel. */
#define PCM_CHANNEL_TFR 21 /* Top front right channel. */
+#define PCM_CHANNEL_RVH 21 /* Right vertical height channel. */
#define PCM_CHANNEL_TC 22 /* Top center channel. */
#define PCM_CHANNEL_TBL 23 /* Top back left channel. */
#define PCM_CHANNEL_TBR 24 /* Top back right channel. */
-#define PCM_CHANNEL_TSL 25 /* Top side left channel */
+#define PCM_CHANNEL_TSL 25 /* Top side left channel. */
#define PCM_CHANNEL_TSR 26 /* Top side right channel. */
#define PCM_CHANNEL_TBC 27 /* Top back center channel. */
#define PCM_CHANNEL_BFC 28 /* Bottom front center channel. */
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 3ea991b..eb2cecc 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -308,6 +308,7 @@
struct audio_microphone_characteristic_t microphones[AUDIO_MICROPHONE_MAX_COUNT];
struct snd_device_to_mic_map mic_map[SND_DEVICE_MAX];
struct spkr_device_chmap *spkr_ch_map;
+ bool use_sprk_default_sample_rate;
};
struct spkr_device_chmap {
@@ -2342,6 +2343,7 @@
my_data->voice_speaker_stereo = false;
my_data->declared_mic_count = 0;
my_data->spkr_ch_map = NULL;
+ my_data->use_sprk_default_sample_rate = true;
be_dai_name_table = NULL;
@@ -2885,6 +2887,9 @@
/* free acdb_meta_key_list */
platform_release_acdb_metainfo_key(platform);
+ if (my_data->acdb_deallocate)
+ my_data->acdb_deallocate();
+
free(platform);
/* deinit usb */
audio_extn_usb_deinit();
@@ -7488,6 +7493,11 @@
platform_get_edid_info(platform);
}
+bool platform_spkr_use_default_sample_rate(void *platform) {
+ struct platform_data *my_data = (struct platform_data *)platform;
+ return my_data->use_sprk_default_sample_rate;
+}
+
void platform_invalidate_backend_config(void * platform,snd_device_t snd_device)
{
struct platform_data *my_data = (struct platform_data *)platform;
diff --git a/hal/msm8916/platform.h b/hal/msm8916/platform.h
index ad8c9aa..e337870 100644
--- a/hal/msm8916/platform.h
+++ b/hal/msm8916/platform.h
@@ -188,6 +188,7 @@
SND_DEVICE_IN_BT_SCO_MIC_NREC,
SND_DEVICE_IN_BT_SCO_MIC_WB,
SND_DEVICE_IN_BT_SCO_MIC_WB_NREC,
+ SND_DEVICE_IN_BT_A2DP,
SND_DEVICE_IN_CAMCORDER_MIC,
SND_DEVICE_IN_VOICE_DMIC,
SND_DEVICE_IN_VOICE_SPEAKER_DMIC,
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index e10a955..07aff7a 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -67,6 +67,7 @@
#define MIXER_XML_PATH_I2S "/etc/mixer_paths_i2s.xml"
#define PLATFORM_INFO_XML_PATH_I2S "/etc/audio_platform_info_extcodec.xml"
#define PLATFORM_INFO_XML_PATH_WSA "/etc/audio_platform_info_wsa.xml"
+#define PLATFORM_INFO_XML_PATH_TDM "/etc/audio_platform_info_tdm.xml"
#else
#define MIXER_XML_BASE_STRING "/vendor/etc/mixer_paths"
#define MIXER_XML_DEFAULT_PATH "/vendor/etc/mixer_paths.xml"
@@ -79,6 +80,7 @@
#define MIXER_XML_PATH_I2S "/vendor/etc/mixer_paths_i2s.xml"
#define PLATFORM_INFO_XML_PATH_I2S "/vendor/etc/audio_platform_info_i2s.xml"
#define PLATFORM_INFO_XML_PATH_WSA "/vendor/etc/audio_platform_info_wsa.xml"
+#define PLATFORM_INFO_XML_PATH_TDM "/vendor/etc/audio_platform_info_tdm.xml"
#endif
#include <linux/msm_audio.h>
@@ -124,7 +126,6 @@
/* Mixer path names */
#define AFE_SIDETONE_MIXER_PATH "afe-sidetone"
-#define AUDIO_PARAMETER_KEY_FLUENCE_TYPE "fluence"
#define AUDIO_PARAMETER_KEY_SLOWTALK "st_enable"
#define AUDIO_PARAMETER_KEY_HD_VOICE "hd_voice"
#define AUDIO_PARAMETER_KEY_VOLUME_BOOST "volume_boost"
@@ -133,6 +134,15 @@
#define AUDIO_PARAMETER_KEY_MONO_SPEAKER "mono_speaker"
+#define AUDIO_PARAMETER_KEY_FLUENCE_TYPE "fluence_type"
+#define AUDIO_PARAMETER_KEY_FLUENCE_VOICE_CALL "fluence_voice"
+#define AUDIO_PARAMETER_KEY_FLUENCE_VOICE_REC "fluence_voice_rec"
+#define AUDIO_PARAMETER_KEY_FLUENCE_AUDIO_REC "fluence_audio_rec"
+#define AUDIO_PARAMETER_KEY_FLUENCE_SPEAKER "fluence_speaker"
+#define AUDIO_PARAMETER_KEY_FLUENCE_MODE "fluence_mode"
+#define AUDIO_PARAMETER_KEY_FLUENCE_HFPCALL "fluence_hfp"
+#define AUDIO_PARAMETER_KEY_FLUENCE_TRI_MIC "fluence_tri_mic"
+
#define AUDIO_PARAMETER_KEY_PERF_LOCK_OPTS "perf_lock_opts"
/* Reload ACDB files from specified path */
@@ -290,6 +300,7 @@
struct audio_microphone_characteristic_t microphones[AUDIO_MICROPHONE_MAX_COUNT];
struct snd_device_to_mic_map mic_map[SND_DEVICE_MAX];
struct spkr_device_chmap *spkr_ch_map;
+ bool use_sprk_default_sample_rate;
};
struct spkr_device_chmap {
@@ -507,6 +518,7 @@
[SND_DEVICE_IN_BT_SCO_MIC_NREC] = "bt-sco-mic",
[SND_DEVICE_IN_BT_SCO_MIC_WB] = "bt-sco-mic-wb",
[SND_DEVICE_IN_BT_SCO_MIC_WB_NREC] = "bt-sco-mic-wb",
+ [SND_DEVICE_IN_BT_A2DP] = "bt-a2dp-cap",
[SND_DEVICE_IN_CAMCORDER_MIC] = "camcorder-mic",
[SND_DEVICE_IN_VOICE_DMIC] = "voice-dmic-ef",
[SND_DEVICE_IN_VOICE_SPEAKER_DMIC] = "voice-speaker-dmic-ef",
@@ -693,6 +705,7 @@
[SND_DEVICE_IN_BT_SCO_MIC_NREC] = 122,
[SND_DEVICE_IN_BT_SCO_MIC_WB] = 38,
[SND_DEVICE_IN_BT_SCO_MIC_WB_NREC] = 123,
+ [SND_DEVICE_IN_BT_A2DP] = 21,
[SND_DEVICE_IN_CAMCORDER_MIC] = 4,
[SND_DEVICE_IN_VOICE_DMIC] = 41,
[SND_DEVICE_IN_VOICE_SPEAKER_DMIC] = 43,
@@ -853,6 +866,7 @@
{TO_NAME_INDEX(SND_DEVICE_IN_BT_SCO_MIC_NREC)},
{TO_NAME_INDEX(SND_DEVICE_IN_BT_SCO_MIC_WB)},
{TO_NAME_INDEX(SND_DEVICE_IN_BT_SCO_MIC_WB_NREC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_BT_A2DP)},
{TO_NAME_INDEX(SND_DEVICE_IN_CAMCORDER_MIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_DMIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_SPEAKER_DMIC)},
@@ -1511,6 +1525,7 @@
backend_tag_table[SND_DEVICE_OUT_VOICE_SPEAKER_VBAT] = strdup("voice-speaker-vbat");
backend_tag_table[SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT] = strdup("voice-speaker-2-vbat");
backend_tag_table[SND_DEVICE_OUT_BT_A2DP] = strdup("bt-a2dp");
+ backend_tag_table[SND_DEVICE_IN_BT_A2DP] = strdup("bt-a2dp-cap");
backend_tag_table[SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP] = strdup("speaker-and-bt-a2dp");
backend_tag_table[SND_DEVICE_OUT_VOICE_SPEAKER_AND_VOICE_HEADPHONES] = strdup("speaker-and-headphones");
backend_tag_table[SND_DEVICE_OUT_VOICE_SPEAKER_AND_VOICE_ANC_HEADSET] = strdup("speaker-and-headphones");
@@ -1612,6 +1627,7 @@
hw_interface_table[SND_DEVICE_IN_BT_SCO_MIC_NREC] = strdup("SLIMBUS_7_TX");
hw_interface_table[SND_DEVICE_IN_BT_SCO_MIC_WB] = strdup("SLIMBUS_7_TX");
hw_interface_table[SND_DEVICE_IN_BT_SCO_MIC_WB_NREC] = strdup("SLIMBUS_7_TX");
+ hw_interface_table[SND_DEVICE_IN_BT_A2DP] = strdup("SLIMBUS_7_TX");
hw_interface_table[SND_DEVICE_IN_CAMCORDER_MIC] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_VOICE_DMIC] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_VOICE_SPEAKER_DMIC] = strdup("SLIMBUS_0_TX");
@@ -2204,7 +2220,7 @@
my_data->voice_speaker_stereo = false;
my_data->declared_mic_count = 0;
my_data->spkr_ch_map = NULL;
-
+ my_data->use_sprk_default_sample_rate = true;
be_dai_name_table = NULL;
property_get("ro.vendor.audio.sdk.fluencetype", my_data->fluence_cap, "");
@@ -2295,11 +2311,23 @@
else if (!strncmp(snd_card_name, "qcs405-wsa-snd-card",
sizeof("qcs405-wsa-snd-card")))
platform_info_init(PLATFORM_INFO_XML_PATH_WSA, my_data, PLATFORM);
+ else if (!strncmp(snd_card_name, "qcs405-tdm-snd-card",
+ sizeof("qcs405-tdm-snd-card")))
+ platform_info_init(PLATFORM_INFO_XML_PATH_TDM, my_data, PLATFORM);
else if (my_data->is_internal_codec)
platform_info_init(PLATFORM_INFO_XML_PATH_INTCODEC, my_data, PLATFORM);
else
platform_info_init(PLATFORM_INFO_XML_PATH, my_data, PLATFORM);
+ /* CSRA devices support multiple sample rates via I2S at spkr out */
+ if (!strncmp(snd_card_name, "qcs405-csra", strlen("qcs405-csra"))) {
+ ALOGE("%s: soundcard: %s supports multiple sample rates", __func__, snd_card_name);
+ my_data->use_sprk_default_sample_rate = false;
+ } else {
+ my_data->use_sprk_default_sample_rate = true;
+ ALOGE("%s: soundcard: %s supports only default sample rate", __func__, snd_card_name);
+ }
+
my_data->voice_feature_set = VOICE_FEATURE_SET_DEFAULT;
my_data->acdb_handle = dlopen(LIB_ACDB_LOADER, RTLD_NOW);
if (my_data->acdb_handle == NULL) {
@@ -2576,11 +2604,18 @@
}
} else {
if (!strncmp(snd_card_name, "qcs405", strlen("qcs405"))) {
- my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].bitwidth_mixer_ctl =
- strdup("WSA_CDC_DMA_RX_0 Format");
- my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].samplerate_mixer_ctl =
- strdup("WSA_CDC_DMA_RX_0 SampleRate");
+ if (!strncmp(snd_card_name, "qcs405-csra", strlen("qcs405-csra"))) {
+ my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].bitwidth_mixer_ctl =
+ strdup("PRIM_MI2S_RX Format");
+ my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].samplerate_mixer_ctl =
+ strdup("PRIM_MI2S_RX SampleRate");
+ } else {
+ my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].bitwidth_mixer_ctl =
+ strdup("WSA_CDC_DMA_RX_0 Format");
+ my_data->current_backend_cfg[DEFAULT_CODEC_BACKEND].samplerate_mixer_ctl =
+ strdup("WSA_CDC_DMA_RX_0 SampleRate");
+ }
my_data->current_backend_cfg[DEFAULT_CODEC_TX_BACKEND].bitwidth_mixer_ctl =
strdup("VA_CDC_DMA_TX_0 Format");
my_data->current_backend_cfg[DEFAULT_CODEC_TX_BACKEND].samplerate_mixer_ctl =
@@ -4811,6 +4846,8 @@
}
} else if (in_device & AUDIO_DEVICE_IN_SPDIF) {
snd_device = SND_DEVICE_IN_SPDIF;
+ } else if (in_device & AUDIO_DEVICE_IN_BLUETOOTH_A2DP) {
+ snd_device = SND_DEVICE_IN_BT_A2DP;
} else if (in_device & AUDIO_DEVICE_IN_AUX_DIGITAL) {
snd_device = SND_DEVICE_IN_HDMI_MIC;
} else if (in_device & AUDIO_DEVICE_IN_HDMI_ARC) {
@@ -5273,13 +5310,106 @@
platform->spkr_ch_map->num_ch = num_ch;
for (i = 0; i < num_ch; i++) {
opts = strtok_r(NULL, ", ", &test_r);
- platform->spkr_ch_map->chmap[i] = strtoul(opts, NULL, 16);
+ if (opts == NULL) {
+ ALOGE("%s: incorrect ch_map\n", __func__);
+ free(platform->spkr_ch_map);
+ platform->spkr_ch_map = NULL;
+ str_parms_del(parms, AUDIO_PARAMETER_KEY_SPKR_DEVICE_CHMAP);
+ return;
+ } else {
+ platform->spkr_ch_map->chmap[i] = strtoul(opts, NULL, 16);
+ }
}
}
str_parms_del(parms, AUDIO_PARAMETER_KEY_SPKR_DEVICE_CHMAP);
}
}
+static void platform_set_fluence_params(void *platform, struct str_parms *parms, char *value, int len)
+{
+ struct platform_data *my_data = (struct platform_data *)platform;
+ int err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_FLUENCE_TYPE, value, len);
+
+ if (err >= 0) {
+ if (!strncmp("fluence", value, sizeof("fluence")))
+ my_data->fluence_type = FLUENCE_DUAL_MIC;
+ else if (!strncmp("fluencepro", value, sizeof("fluencepro")))
+ my_data->fluence_type = FLUENCE_QUAD_MIC | FLUENCE_DUAL_MIC;
+ else if (!strncmp("none", value, sizeof("none")))
+ my_data->fluence_type = FLUENCE_NONE;
+
+ str_parms_del(parms, AUDIO_PARAMETER_KEY_FLUENCE_TYPE);
+ }
+
+ err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_FLUENCE_TRI_MIC, value, len);
+ if (err >= 0) {
+ if (!strncmp("true", value, sizeof("true")))
+ my_data->fluence_type |= FLUENCE_TRI_MIC;
+
+ str_parms_del(parms, AUDIO_PARAMETER_KEY_FLUENCE_TRI_MIC);
+ }
+
+ err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_FLUENCE_VOICE_CALL, value, len);
+ if (err >= 0) {
+ if (!strncmp("true", value, sizeof("true")))
+ my_data->fluence_in_voice_call = true;
+ else
+ my_data->fluence_in_voice_call = false;
+
+ str_parms_del(parms, AUDIO_PARAMETER_KEY_FLUENCE_VOICE_CALL);
+ }
+
+ err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_FLUENCE_VOICE_REC, value, len);
+ if (err >= 0) {
+ if (!strncmp("true", value, sizeof("true")))
+ my_data->fluence_in_voice_rec = true;
+ else
+ my_data->fluence_in_voice_rec = false;
+
+ str_parms_del(parms, AUDIO_PARAMETER_KEY_FLUENCE_VOICE_REC);
+ }
+
+ err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_FLUENCE_AUDIO_REC, value, len);
+ if (err >= 0) {
+ if (!strncmp("true", value, sizeof("true")))
+ my_data->fluence_in_audio_rec = true;
+ else
+ my_data->fluence_in_audio_rec = false;
+
+ str_parms_del(parms, AUDIO_PARAMETER_KEY_FLUENCE_AUDIO_REC);
+ }
+
+ err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_FLUENCE_SPEAKER, value, len);
+ if (err >= 0) {
+ if (!strncmp("true", value, sizeof("true")))
+ my_data->fluence_in_spkr_mode = true;
+ else
+ my_data->fluence_in_spkr_mode = false;
+
+ str_parms_del(parms, AUDIO_PARAMETER_KEY_FLUENCE_SPEAKER);
+ }
+
+ err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_FLUENCE_MODE, value, len);
+ if (err >= 0) {
+ if (!strncmp("broadside", value, sizeof("broadside")))
+ my_data->fluence_mode = FLUENCE_BROADSIDE;
+ else if (!strncmp("endfire", value, sizeof("endfire")))
+ my_data->fluence_mode = FLUENCE_ENDFIRE;
+
+ str_parms_del(parms, AUDIO_PARAMETER_KEY_FLUENCE_MODE);
+ }
+
+ err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_FLUENCE_HFPCALL, value, len);
+ if (err >= 0) {
+ if (!strncmp("true", value, sizeof("true")))
+ my_data->fluence_in_hfp_call = true;
+ else
+ my_data->fluence_in_hfp_call = false;
+
+ str_parms_del(parms, AUDIO_PARAMETER_KEY_FLUENCE_HFPCALL);
+ }
+}
+
int platform_set_parameters(void *platform, struct str_parms *parms)
{
struct platform_data *my_data = (struct platform_data *)platform;
@@ -5413,6 +5543,8 @@
ALOGV("%s: max_mic_count %d", __func__, my_data->max_mic_count);
}
+ platform_set_fluence_params(platform, parms, value, len);
+
/* handle audio calibration parameters */
set_audiocal(platform, parms, value, len);
native_audio_set_params(platform, parms, value, len);
@@ -6372,6 +6504,7 @@
if (snd_device == SND_DEVICE_OUT_BT_A2DP ||
snd_device == SND_DEVICE_OUT_BT_SCO ||
snd_device == SND_DEVICE_OUT_BT_SCO_WB ||
+ snd_device == SND_DEVICE_IN_BT_A2DP ||
snd_device == SND_DEVICE_OUT_AFE_PROXY) {
backend_change = false;
return backend_change;
@@ -6515,9 +6648,15 @@
bit_width = CODEC_BACKEND_DEFAULT_BIT_WIDTH;
ALOGD("%s:becf: afe: reset to default bitwidth %d", __func__, bit_width);
}
- sample_rate = CODEC_BACKEND_DEFAULT_SAMPLE_RATE;
- ALOGD("%s:becf: afe: playback on codec device not supporting native playback set "
+ /*
+ * In case of CSRA speaker out, all sample rates are supported, so
+ * check platform here
+ */
+ if (platform_spkr_use_default_sample_rate(adev->platform)) {
+ sample_rate = CODEC_BACKEND_DEFAULT_SAMPLE_RATE;
+ ALOGD("%s:becf: afe: playback on codec device not supporting native playback set "
"default Sample Rate(48k)", __func__);
+ }
}
if (backend_idx == USB_AUDIO_RX_BACKEND) {
@@ -7219,6 +7358,40 @@
channel_map[7] = PCM_CHANNEL_RS;
}
break;
+ case 12:
+ /* AUDIO_CHANNEL_OUT_7POINT1POINT4 */
+ channel_map[0] = PCM_CHANNEL_FL;
+ channel_map[1] = PCM_CHANNEL_FR;
+ channel_map[2] = PCM_CHANNEL_FC;
+ channel_map[3] = PCM_CHANNEL_LFE;
+ channel_map[4] = PCM_CHANNEL_LB;
+ channel_map[5] = PCM_CHANNEL_RB;
+ channel_map[6] = PCM_CHANNEL_LS;
+ channel_map[7] = PCM_CHANNEL_RS;
+ channel_map[8] = PCM_CHANNEL_TFL;
+ channel_map[9] = PCM_CHANNEL_TFR;
+ channel_map[10] = PCM_CHANNEL_TSL;
+ channel_map[11] = PCM_CHANNEL_TSR;
+ break;
+ case 16:
+ /* 16 channels */
+ channel_map[0] = PCM_CHANNEL_FL;
+ channel_map[1] = PCM_CHANNEL_FR;
+ channel_map[2] = PCM_CHANNEL_FC;
+ channel_map[3] = PCM_CHANNEL_LFE;
+ channel_map[4] = PCM_CHANNEL_LB;
+ channel_map[5] = PCM_CHANNEL_RB;
+ channel_map[6] = PCM_CHANNEL_LS;
+ channel_map[7] = PCM_CHANNEL_RS;
+ channel_map[8] = PCM_CHANNEL_TFL;
+ channel_map[9] = PCM_CHANNEL_TFR;
+ channel_map[10] = PCM_CHANNEL_TSL;
+ channel_map[11] = PCM_CHANNEL_TSR;
+ channel_map[12] = PCM_CHANNEL_FLC;
+ channel_map[13] = PCM_CHANNEL_FRC;
+ channel_map[14] = PCM_CHANNEL_RLC;
+ channel_map[15] = PCM_CHANNEL_RRC;
+ break;
default:
ALOGE("unsupported channels %d for setting channel map", channels);
return -1;
@@ -7343,12 +7516,21 @@
struct mixer_ctl *ctl;
char mixer_ctl_name[44] = {0}; // max length of name is 44 as defined
int ret;
- unsigned int i;
- long set_values[FCC_8] = {0};
+ int i=0, n=0;
+ long set_values[AUDIO_MAX_DSP_CHANNELS];
struct platform_data *my_data = (struct platform_data *)platform;
struct audio_device *adev = my_data->adev;
ALOGV("%s channel_count:%d",__func__, ch_count);
- if (NULL == ch_map || (ch_count < 1) || (ch_count > FCC_8)) {
+
+ /*
+ * FIXME:
+ * Currently the channel mask in audio.h is limited to 30 channels,
+ * (=AUDIO_CHANNEL_COUNT_MAX), whereas the mixer controls already
+ * allow up to AUDIO_MAX_DSP_CHANNELS channels as per final requirement.
+ * Until channel mask definition is not changed from a uint32_t value
+ * to something else, a sanity check is needed here.
+ */
+ if (NULL == ch_map || (ch_count < 1) || (ch_count > AUDIO_CHANNEL_COUNT_MAX)) {
ALOGE("%s: Invalid channel mapping or channel count value", __func__);
return -EINVAL;
}
@@ -7366,12 +7548,34 @@
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);
return -EINVAL;
}
- for (i = 0; i < (unsigned int)ch_count; i++) {
+
+ /* find out how many values the control can set */
+ n = mixer_ctl_get_num_values(ctl);
+
+ if (n != ch_count)
+ ALOGV("%s chcnt %d != mixerctl elem size %d",__func__, ch_count, n);
+
+ if (n < ch_count) {
+ ALOGE("%s chcnt %d > mixerctl elem size %d",__func__, ch_count, n);
+ return -EINVAL;
+ }
+
+ if (n > AUDIO_MAX_DSP_CHANNELS) {
+ ALOGE("%s mixerctl elem size %d > AUDIO_MAX_DSP_CHANNELS %d",__func__, n, AUDIO_MAX_DSP_CHANNELS);
+ return -EINVAL;
+ }
+
+ /* initialize all set_values to zero */
+ memset (set_values, 0, sizeof(set_values));
+
+ /* copy only as many values as corresponding mixer_ctrl allows */
+ for (i = 0; i < ch_count; i++) {
set_values[i] = ch_map[i];
}
@@ -7379,7 +7583,8 @@
set_values[0], set_values[1], set_values[2], set_values[3], set_values[4],
set_values[5], set_values[6], set_values[7], ch_count);
- ret = mixer_ctl_set_array(ctl, set_values, ARRAY_SIZE(set_values));
+ ret = mixer_ctl_set_array(ctl, set_values, n);
+
if (ret < 0) {
ALOGE("%s: Could not set ctl, error:%d ch_count:%d",
__func__, ret, ch_count);
@@ -7544,6 +7749,11 @@
return 0;
}
+bool platform_spkr_use_default_sample_rate(void *platform) {
+ struct platform_data *my_data = (struct platform_data *)platform;
+ return my_data->use_sprk_default_sample_rate;
+}
+
int platform_set_edid_channels_configuration(void *platform, int channels, int backend_idx) {
struct platform_data *my_data = (struct platform_data *)platform;
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index eb6edb0..60e6581 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -186,6 +186,7 @@
SND_DEVICE_IN_BT_SCO_MIC_NREC,
SND_DEVICE_IN_BT_SCO_MIC_WB,
SND_DEVICE_IN_BT_SCO_MIC_WB_NREC,
+ SND_DEVICE_IN_BT_A2DP,
SND_DEVICE_IN_CAMCORDER_MIC,
SND_DEVICE_IN_VOICE_DMIC,
SND_DEVICE_IN_VOICE_SPEAKER_DMIC,
@@ -293,6 +294,8 @@
#define AUDIO_PARAMETER_KEY_TRUE_32_BIT "true_32_bit"
+#define AUDIO_MAX_DSP_CHANNELS 32
+
#define ALL_SESSION_VSID 0xFFFFFFFF
#define DEFAULT_MUTE_RAMP_DURATION_MS 20
#define DEFAULT_VOLUME_RAMP_DURATION_MS 20
diff --git a/hal/platform_api.h b/hal/platform_api.h
index 6474b61..21f3e72 100644
--- a/hal/platform_api.h
+++ b/hal/platform_api.h
@@ -225,6 +225,7 @@
snd_device_t snd_device,
struct mix_matrix_params mm_params);
int platform_set_edid_channels_configuration(void *platform, int channels, int backend_idx);
+bool platform_spkr_use_default_sample_rate(void *platform);
unsigned char platform_map_to_edid_format(int format);
bool platform_is_edid_supported_format(void *platform, int format);
bool platform_is_edid_supported_sample_rate(void *platform, int sample_rate);
diff --git a/hal/voice_extn/compress_voip.c b/hal/voice_extn/compress_voip.c
index 2736d68..890f508 100644
--- a/hal/voice_extn/compress_voip.c
+++ b/hal/voice_extn/compress_voip.c
@@ -255,6 +255,7 @@
int ret = 0;
struct audio_usecase *uc_info;
struct listnode *node;
+ struct stream_out *out = NULL;
ALOGD("%s: enter, out_stream_count=%d, in_stream_count=%d",
__func__, voip_data.out_stream_count, voip_data.in_stream_count);
@@ -292,6 +293,15 @@
// restore device for other active usecases
list_for_each(node, &adev->usecase_list) {
uc_info = node_to_item(node, struct audio_usecase, list);
+ out = uc_info->stream.out;
+ if (out && adev->adm_register_output_stream
+ && adev->adm_on_routing_change) {
+ adev->adm_register_output_stream(adev->adm_data,
+ out->handle,
+ out->flags);
+ adev->adm_on_routing_change(adev->adm_data,
+ out->handle);
+ }
select_devices(adev, uc_info->id);
}
} else {
diff --git a/hdmi_in_test/Makefile.am b/hdmi_in_test/Makefile.am
index 34e4ff5..eb74d21 100644
--- a/hdmi_in_test/Makefile.am
+++ b/hdmi_in_test/Makefile.am
@@ -1,9 +1,17 @@
ACLOCAL_AMFLAGS = -I m4
bin_PROGRAMS = hdmi_in_test
+bin_PROGRAMS += fmt_change_test
pkgconfigdir = $(libdir)/pkgconfig
+REC_INCLUDES = -I $(top_srcdir)/qahw_api/inc
+REC_INCLUDES += -I $(top_srcdir)/qahw/inc
+
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
+fmt_change_test_SOURCES = src/fmt_change_test.c
+fmt_change_test_CFLAGS = $(CFLAGS) -Wno-sign-compare -Werror $(REC_INCLUDES)
+fmt_change_test_LDADD = -llog -lpthread ../qahw_api/libqahw.la
+
diff --git a/hdmi_in_test/src/fmt_change_test.c b/hdmi_in_test/src/fmt_change_test.c
new file mode 100644
index 0000000..6651c6d
--- /dev/null
+++ b/hdmi_in_test/src/fmt_change_test.c
@@ -0,0 +1,811 @@
+/*
+ * Copyright (c) 2016-2018, 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 to capture event updates from kernel */
+/*#define LOG_NDEBUG 0*/
+#include <getopt.h>
+#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 <signal.h>
+#include <errno.h>
+#include "qahw_api.h"
+#include "qahw_defs.h"
+
+/* add local define to prevent compilation errors on other platforms */
+#ifndef AUDIO_DEVICE_IN_HDMI_ARC
+#define AUDIO_DEVICE_IN_HDMI_ARC (AUDIO_DEVICE_BIT_IN | 0x8000000)
+#endif
+
+static int sock_event_fd = -1;
+
+void *context = NULL;
+FILE * log_file = NULL;
+volatile bool stop_test = false;
+volatile bool stop_record = false;
+volatile bool record_active = false;
+
+#define HDMI_SYS_PATH "/sys/devices/platform/soc/78b7000.i2c/i2c-3/3-0064/"
+const char hdmi_in_audio_sys_path[] = HDMI_SYS_PATH "link_on0";
+const char hdmi_in_power_on_sys_path[] = HDMI_SYS_PATH "power_on";
+const char hdmi_in_audio_path_sys_path[] = HDMI_SYS_PATH "audio_path";
+const char hdmi_in_arc_enable_sys_path[] = HDMI_SYS_PATH "arc_enable";
+
+const char hdmi_in_audio_state_sys_path[] = HDMI_SYS_PATH "audio_state";
+const char hdmi_in_audio_format_sys_path[] = HDMI_SYS_PATH "audio_format";
+const char hdmi_in_audio_sample_rate_sys_path[] = HDMI_SYS_PATH "audio_rate";
+const char hdmi_in_audio_layout_sys_path[] = HDMI_SYS_PATH "audio_layout";
+
+#define SPDIF_SYS_PATH "/sys/devices/platform/soc/soc:qcom,msm-dai-q6-spdif-pri-tx/"
+const char spdif_in_audio_state_sys_path[] = SPDIF_SYS_PATH "audio_state";
+const char spdif_in_audio_format_sys_path[] = SPDIF_SYS_PATH "audio_format";
+const char spdif_in_audio_sample_rate_sys_path[] = SPDIF_SYS_PATH "audio_rate";
+
+#define SPDIF_ARC_SYS_PATH "/sys/devices/platform/soc/soc:qcom,msm-dai-q6-spdif-sec-tx/"
+const char spdif_arc_in_audio_state_sys_path[] = SPDIF_ARC_SYS_PATH "audio_state";
+const char spdif_arc_in_audio_format_sys_path[] = SPDIF_ARC_SYS_PATH "audio_format";
+const char spdif_arc_in_audio_sample_rate_sys_path[] = SPDIF_ARC_SYS_PATH "audio_rate";
+
+#define ID_RIFF 0x46464952
+#define ID_WAVE 0x45564157
+#define ID_FMT 0x20746d66
+#define ID_DATA 0x61746164
+
+#define FORMAT_PCM 1
+
+struct wav_header {
+ uint32_t riff_id;
+ uint32_t riff_sz;
+ uint32_t riff_fmt;
+ uint32_t fmt_id;
+ uint32_t fmt_sz;
+ uint16_t audio_format;
+ uint16_t num_channels;
+ uint32_t sample_rate;
+ uint32_t byte_rate; /* sample_rate * num_channels * bps / 8 */
+ uint16_t block_align; /* num_channels * bps / 8 */
+ uint16_t bits_per_sample;
+ uint32_t data_id;
+ uint32_t data_sz;
+};
+
+struct test_data {
+ qahw_module_handle_t *qahw_mod_handle;
+ audio_io_handle_t handle;
+ audio_devices_t input_device;
+ double record_length;
+ int rec_cnt;
+
+ char *audio_fmt_chg_text;
+ int audio_fmt_chg_len;
+ pthread_t record_th;
+ pthread_t poll_event_th;
+ pthread_attr_t poll_event_attr;
+
+ int bit_width;
+ audio_input_flags_t flags;
+ audio_config_t config;
+ audio_source_t source;
+
+ int spdif_audio_state;
+ int spdif_audio_mode;
+ int spdif_sample_rate;
+ int spdif_num_channels;
+
+ int hdmi_power_on;
+ int hdmi_audio_path;
+ int hdmi_arc_enable;
+
+ int hdmi_audio_state;
+ int hdmi_audio_mode;
+ int hdmi_audio_layout;
+ int hdmi_sample_rate;
+ int hdmi_num_channels;
+
+ int spdif_arc_audio_state;
+ int spdif_arc_audio_mode;
+ int spdif_arc_sample_rate;
+ int spdif_arc_num_channels;
+
+ audio_devices_t new_input_device;
+
+ audio_devices_t act_input_device; /* HDMI might use I2S and SPDIF */
+
+ int act_audio_state; /* audio active */
+ int act_audio_mode; /* 0=LPCM, 1=Compr */
+ int act_sample_rate; /* transmission sample rate */
+ int act_num_channels; /* transmission channels */
+};
+
+struct test_data tdata;
+
+void stop_signal_handler(int signal)
+{
+ stop_test = true;
+}
+
+void *start_input(void *thread_param) {
+ int rc = 0, ret = 0, count = 0;
+ ssize_t bytes_read = -1;
+ char file_name[256] = "/data/rec";
+ int data_sz = 0, name_len = strlen(file_name);
+ qahw_in_buffer_t in_buf;
+
+ qahw_module_handle_t *qahw_mod_handle = tdata.qahw_mod_handle;
+
+ /* convert/check params before use */
+ tdata.config.sample_rate = tdata.act_sample_rate;
+
+ if (tdata.act_audio_mode) {
+ tdata.config.format = AUDIO_FORMAT_IEC61937;
+ tdata.flags = QAHW_INPUT_FLAG_COMPRESS | QAHW_INPUT_FLAG_PASSTHROUGH;
+ } else {
+ if (tdata.bit_width == 32)
+ tdata.config.format = AUDIO_FORMAT_PCM_8_24_BIT;
+ else if (tdata.bit_width == 24)
+ tdata.config.format = AUDIO_FORMAT_PCM_24_BIT_PACKED;
+ else
+ tdata.config.format = AUDIO_FORMAT_PCM_16_BIT;
+ tdata.flags = 0;
+ }
+
+ switch (tdata.act_num_channels) {
+ case 2:
+ tdata.config.channel_mask = AUDIO_CHANNEL_IN_STEREO;
+ break;
+ case 8:
+ tdata.config.channel_mask = AUDIO_CHANNEL_INDEX_MASK_8;
+ break;
+ default:
+ fprintf(log_file,
+ "ERROR :::: channel count %d not supported\n",
+ tdata.act_num_channels);
+ pthread_exit(0);
+ }
+ tdata.config.frame_count = 0;
+
+ /* Open audio input stream */
+ qahw_stream_handle_t* in_handle = NULL;
+
+ rc = qahw_open_input_stream(qahw_mod_handle, tdata.handle,
+ tdata.act_input_device, &tdata.config, &in_handle, tdata.flags,
+ "input_stream", tdata.source);
+ if (rc) {
+ fprintf(log_file,
+ "ERROR :::: Could not open input stream, handle(%d)\n",
+ tdata.handle);
+ pthread_exit(0);
+ }
+
+ /* Get buffer size to get upper bound on data to read from the HAL */
+ size_t buffer_size = qahw_in_get_buffer_size(in_handle);
+ char *buffer = (char *) calloc(1, buffer_size);
+ size_t written_size;
+ if (buffer == NULL) {
+ fprintf(log_file, "calloc failed!!, handle(%d)\n", tdata.handle);
+ pthread_exit(0);
+ }
+
+ fprintf(log_file, " input opened, buffer %p, size %zu, handle(%d)\n", buffer,
+ buffer_size, tdata.handle);
+
+ /* set profile for the recording session */
+ qahw_in_set_parameters(in_handle, "audio_stream_profile=record_unprocessed");
+
+ if (audio_is_linear_pcm(tdata.config.format))
+ snprintf(file_name + name_len, sizeof(file_name) - name_len, "%d.wav",
+ tdata.rec_cnt);
+ else
+ snprintf(file_name + name_len, sizeof(file_name) - name_len, "%d.raw",
+ tdata.rec_cnt);
+
+ tdata.rec_cnt++;
+
+ FILE *fd = fopen(file_name, "w");
+ if (fd == NULL) {
+ fprintf(log_file, "File open failed\n");
+ free(buffer);
+ pthread_exit(0);
+ }
+
+ int bps = 16;
+
+ switch (tdata.config.format) {
+ case AUDIO_FORMAT_PCM_24_BIT_PACKED:
+ bps = 24;
+ break;
+ case AUDIO_FORMAT_PCM_8_24_BIT:
+ case AUDIO_FORMAT_PCM_32_BIT:
+ bps = 32;
+ break;
+ case AUDIO_FORMAT_PCM_16_BIT:
+ default:
+ bps = 16;
+ }
+
+ struct wav_header hdr;
+ hdr.riff_id = ID_RIFF;
+ hdr.riff_sz = 0;
+ hdr.riff_fmt = ID_WAVE;
+ hdr.fmt_id = ID_FMT;
+ hdr.fmt_sz = 16;
+ hdr.audio_format = FORMAT_PCM;
+ hdr.num_channels = tdata.act_num_channels;
+ hdr.sample_rate = tdata.config.sample_rate;
+ hdr.byte_rate = hdr.sample_rate * hdr.num_channels * (bps / 8);
+ hdr.block_align = hdr.num_channels * (bps / 8);
+ hdr.bits_per_sample = bps;
+ hdr.data_id = ID_DATA;
+ hdr.data_sz = 0;
+ if (audio_is_linear_pcm(tdata.config.format))
+ fwrite(&hdr, 1, sizeof(hdr), fd);
+
+ memset(&in_buf, 0, sizeof(qahw_in_buffer_t));
+ while (true && !stop_record) {
+ in_buf.buffer = buffer;
+ in_buf.bytes = buffer_size;
+ bytes_read = qahw_in_read(in_handle, &in_buf);
+
+ written_size = fwrite(in_buf.buffer, 1, bytes_read, fd);
+ if (written_size < bytes_read) {
+ printf("Error in fwrite(%d)=%s\n", ferror(fd),
+ strerror(ferror(fd)));
+ break;
+ }
+ data_sz += bytes_read;
+ }
+
+ if (audio_is_linear_pcm(tdata.config.format)) {
+ /* update lengths in header */
+ hdr.data_sz = data_sz;
+ hdr.riff_sz = data_sz + 44 - 8;
+ fseek(fd, 0, SEEK_SET);
+ fwrite(&hdr, 1, sizeof(hdr), fd);
+ }
+ free(buffer);
+ fclose(fd);
+ fd = NULL;
+
+ fprintf(log_file, " closing input, handle(%d), written %d bytes", tdata.handle, data_sz);
+
+ /* Close input stream and device. */
+ rc = qahw_in_standby(in_handle);
+ if (rc) {
+ fprintf(log_file, "in standby failed %d, handle(%d)\n", rc,
+ tdata.handle);
+ }
+
+ rc = qahw_close_input_stream(in_handle);
+ if (rc) {
+ fprintf(log_file, "could not close input stream %d, handle(%d)\n", rc,
+ tdata.handle);
+ }
+
+ fprintf(log_file,
+ "\n\n The audio recording has been saved to %s.\n"
+ "The audio data has the following characteristics:\n Sample rate: %i\n Format: %d\n "
+ "Num channels: %i, handle(%d)\n\n", file_name,
+ tdata.config.sample_rate, tdata.config.format, tdata.act_num_channels,
+ tdata.handle);
+
+ return NULL;
+}
+
+void start_rec_thread(void)
+{
+ int ret = 0;
+
+ stop_record = false;
+ record_active = true;
+
+ fprintf(log_file, "\n Create record thread \n");
+ ret = pthread_create(&tdata.record_th, NULL, start_input, (void *)&tdata);
+ if (ret) {
+ fprintf(log_file, " Failed to create record thread\n");
+ exit(1);
+ }
+}
+
+void stop_rec_thread(void)
+{
+ if (record_active) {
+ record_active = false;
+ stop_record = true;
+ fprintf(log_file, "\n Stop record thread \n");
+ pthread_join(tdata.record_th, NULL);
+ }
+}
+
+
+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_input_status()
+{
+ switch (tdata.input_device) {
+ case AUDIO_DEVICE_IN_SPDIF:
+ read_data_from_fd(spdif_in_audio_state_sys_path, &tdata.spdif_audio_state);
+ read_data_from_fd(spdif_in_audio_format_sys_path, &tdata.spdif_audio_mode);
+ read_data_from_fd(spdif_in_audio_sample_rate_sys_path, &tdata.spdif_sample_rate);
+ tdata.spdif_num_channels = 2;
+ tdata.new_input_device = AUDIO_DEVICE_IN_SPDIF;
+
+ fprintf(log_file, "spdif audio_state: %d, audio_format: %d, sample_rate: %d, num_channels: %d\n",
+ tdata.spdif_audio_state, tdata.spdif_audio_mode, tdata.spdif_sample_rate, tdata.spdif_num_channels);
+ break;
+ case AUDIO_DEVICE_IN_HDMI:
+ read_data_from_fd(hdmi_in_power_on_sys_path, &tdata.hdmi_power_on);
+ read_data_from_fd(hdmi_in_audio_path_sys_path, &tdata.hdmi_audio_path);
+ read_data_from_fd(hdmi_in_arc_enable_sys_path, &tdata.hdmi_arc_enable);
+
+ read_data_from_fd(hdmi_in_audio_state_sys_path, &tdata.hdmi_audio_state);
+ read_data_from_fd(hdmi_in_audio_format_sys_path, &tdata.hdmi_audio_mode);
+ read_data_from_fd(hdmi_in_audio_sample_rate_sys_path, &tdata.hdmi_sample_rate);
+ read_data_from_fd(hdmi_in_audio_layout_sys_path, &tdata.hdmi_audio_layout);
+ if (tdata.hdmi_audio_layout)
+ tdata.hdmi_num_channels = 8;
+ else
+ tdata.hdmi_num_channels = 2;
+ /* todo: read ch_count, ch_alloc */
+
+ read_data_from_fd(spdif_arc_in_audio_state_sys_path, &tdata.spdif_arc_audio_state);
+ read_data_from_fd(spdif_arc_in_audio_format_sys_path, &tdata.spdif_arc_audio_mode);
+ read_data_from_fd(spdif_arc_in_audio_sample_rate_sys_path, &tdata.spdif_arc_sample_rate);
+ tdata.spdif_arc_num_channels = 2;
+
+ if (tdata.hdmi_arc_enable ||
+ (tdata.hdmi_audio_state && (tdata.hdmi_audio_layout == 0) && tdata.hdmi_audio_mode)) {
+ tdata.new_input_device = AUDIO_DEVICE_IN_HDMI_ARC;
+ fprintf(log_file, "hdmi audio interface SPDIF_ARC\n");
+ } else {
+ tdata.new_input_device = AUDIO_DEVICE_IN_HDMI;
+ fprintf(log_file, "hdmi audio interface MI2S\n");
+ }
+
+ fprintf(log_file, "hdmi audio_state: %d, audio_format: %d, sample_rate: %d, num_channels: %d\n",
+ tdata.hdmi_audio_state, tdata.hdmi_audio_mode, tdata.hdmi_sample_rate, tdata.hdmi_num_channels);
+ fprintf(log_file, "arc audio_state: %d, audio_format: %d, sample_rate: %d, num_channels: %d\n",
+ tdata.spdif_arc_audio_state, tdata.spdif_arc_audio_mode, tdata.spdif_arc_sample_rate, tdata.spdif_arc_num_channels);
+ break;
+ }
+}
+
+void input_restart_check(void)
+{
+ get_input_status();
+
+ switch (tdata.input_device) {
+ case AUDIO_DEVICE_IN_SPDIF:
+ if ((tdata.act_input_device != tdata.new_input_device) ||
+ (tdata.spdif_audio_state == 2)) {
+ fprintf(log_file, "old audio_state: %d, audio_format: %d, rate: %d, channels: %d\n",
+ tdata.act_audio_state, tdata.act_audio_mode,
+ tdata.act_sample_rate, tdata.act_num_channels);
+ fprintf(log_file, "new spdif audio_state: %d, audio_format: %d, rate: %d, channels: %d\n",
+ tdata.spdif_audio_state, tdata.spdif_audio_mode,
+ tdata.spdif_sample_rate, tdata.spdif_num_channels);
+
+ stop_rec_thread();
+
+ tdata.act_input_device = AUDIO_DEVICE_IN_SPDIF;
+ tdata.act_audio_state = 1;
+ tdata.act_audio_mode = tdata.spdif_audio_mode;
+ tdata.act_sample_rate = tdata.spdif_sample_rate;
+ tdata.act_num_channels = tdata.spdif_num_channels;
+
+ start_rec_thread();
+ }
+ break;
+ case AUDIO_DEVICE_IN_HDMI:
+ if (tdata.act_input_device != tdata.new_input_device) {
+ stop_rec_thread();
+
+ if (tdata.new_input_device == AUDIO_DEVICE_IN_HDMI) {
+ fprintf(log_file, "old audio_state: %d, audio_format: %d, rate: %d, channels: %d\n",
+ tdata.act_audio_state, tdata.act_audio_mode,
+ tdata.act_sample_rate, tdata.act_num_channels);
+ fprintf(log_file, "new hdmi audio_state: %d, audio_format: %d, rate: %d, channels: %d\n",
+ tdata.hdmi_audio_state, tdata.hdmi_audio_mode,
+ tdata.hdmi_sample_rate, tdata.hdmi_num_channels);
+
+ tdata.act_input_device = AUDIO_DEVICE_IN_HDMI;
+ tdata.act_audio_state = tdata.hdmi_audio_state;
+ tdata.act_audio_mode = tdata.hdmi_audio_mode;
+ tdata.act_sample_rate = tdata.hdmi_sample_rate;
+ tdata.act_num_channels = tdata.hdmi_num_channels;
+
+ if (tdata.hdmi_audio_state)
+ start_rec_thread();
+ } else {
+ tdata.act_input_device = AUDIO_DEVICE_IN_HDMI_ARC;
+ if (tdata.hdmi_arc_enable) {
+ fprintf(log_file, "old audio_state: %d, audio_format: %d, rate: %d, channels: %d\n",
+ tdata.act_audio_state, tdata.act_audio_mode,
+ tdata.act_sample_rate, tdata.act_num_channels);
+ fprintf(log_file, "new arc audio_state: %d, audio_format: %d, rate: %d, channels: %d\n",
+ tdata.spdif_arc_audio_state, tdata.spdif_arc_audio_mode,
+ tdata.spdif_arc_sample_rate, tdata.spdif_arc_num_channels);
+
+ tdata.act_audio_state = 1;
+ tdata.act_audio_mode = tdata.spdif_arc_audio_mode;
+ tdata.act_sample_rate = tdata.spdif_arc_sample_rate;
+ tdata.act_num_channels = tdata.spdif_arc_num_channels;
+ } else {
+ fprintf(log_file, "old audio_state: %d, audio_format: %d, rate: %d, channels: %d\n",
+ tdata.act_audio_state, tdata.act_audio_mode,
+ tdata.act_sample_rate, tdata.act_num_channels);
+ fprintf(log_file, "new arc (from hdmi) audio_state: %d, audio_format: %d, rate: %d, channels: %d\n",
+ tdata.hdmi_audio_state, tdata.hdmi_audio_mode,
+ tdata.hdmi_sample_rate, tdata.hdmi_num_channels);
+
+ tdata.act_audio_state = 1;
+ tdata.act_audio_mode = tdata.hdmi_audio_mode;
+ tdata.act_sample_rate = tdata.hdmi_sample_rate;
+ tdata.act_num_channels = tdata.hdmi_num_channels;
+ }
+ start_rec_thread();
+ }
+ } else { /* check for change on same audio device */
+ if (tdata.new_input_device == AUDIO_DEVICE_IN_HDMI) {
+ if ((tdata.act_audio_state != tdata.hdmi_audio_state) ||
+ (tdata.act_audio_mode != tdata.hdmi_audio_mode) ||
+ (tdata.act_sample_rate != tdata.hdmi_sample_rate) ||
+ (tdata.act_num_channels != tdata.hdmi_num_channels)) {
+
+ fprintf(log_file, "old audio_state: %d, audio_format: %d, rate: %d, channels: %d\n",
+ tdata.act_audio_state, tdata.act_audio_mode,
+ tdata.act_sample_rate, tdata.act_num_channels);
+ fprintf(log_file, "new hdmi audio_state: %d, audio_format: %d, rate: %d, channels: %d\n",
+ tdata.hdmi_audio_state, tdata.hdmi_audio_mode,
+ tdata.hdmi_sample_rate, tdata.hdmi_num_channels);
+
+ stop_rec_thread();
+
+ tdata.act_audio_state = tdata.hdmi_audio_state;
+ tdata.act_audio_mode = tdata.hdmi_audio_mode;
+ tdata.act_sample_rate = tdata.hdmi_sample_rate;
+ tdata.act_num_channels = tdata.hdmi_num_channels;
+
+ if (tdata.hdmi_audio_state)
+ start_rec_thread();
+ }
+ } else {
+ if (tdata.spdif_arc_audio_state == 2) {
+ fprintf(log_file, "old audio_state: %d, audio_format: %d, rate: %d, channels: %d\n",
+ tdata.act_audio_state, tdata.act_audio_mode,
+ tdata.act_sample_rate, tdata.act_num_channels);
+ fprintf(log_file, "new arc audio_state: %d, audio_format: %d, rate: %d, channels: %d\n",
+ tdata.spdif_arc_audio_state, tdata.spdif_arc_audio_mode,
+ tdata.spdif_arc_sample_rate, tdata.spdif_arc_num_channels);
+
+ stop_rec_thread();
+
+ tdata.act_audio_state = 1;
+ tdata.act_audio_mode = tdata.spdif_arc_audio_mode;
+ tdata.act_sample_rate = tdata.spdif_arc_sample_rate;
+ tdata.act_num_channels = tdata.spdif_arc_num_channels;
+
+ start_rec_thread();
+ }
+ }
+ }
+ break;
+ }
+}
+
+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;
+ int audio_changed;
+
+ input_restart_check();
+
+ while(!stop_test) {
+
+ fds.fd = sock_event_fd;
+ fds.events = POLLIN;
+ fds.revents = 0;
+ i = poll(&fds, 1, 5); /* wait 5 msec */
+
+ if (i > 0 && (fds.revents & POLLIN)) {
+ count = recv(sock_event_fd, buffer, (64*1024), 0 );
+ if (count > 0) {
+ buffer[count] = '\0';
+ audio_changed = 0;
+ j = 0;
+ while(j < count) {
+ if (strncmp(&buffer[j], "DEVPATH=", 8) == 0) {
+ dev_path = &buffer[j+8];
+ j += 8;
+ continue;
+ } else if (tdata.input_device == AUDIO_DEVICE_IN_SPDIF) {
+ if (strncmp(&buffer[j], "PRI_SPDIF_TX=MEDIA_CONFIG_CHANGE", strlen("PRI_SPDIF_TX=MEDIA_CONFIG_CHANGE")) == 0) {
+ audio_changed = 1;
+ ALOGI("AUDIO CHANGE EVENT: %s\n", &buffer[j]);
+ j += strlen("PRI_SPDIF_TX=MEDIA_CONFIG_CHANGE");
+ continue;
+ }
+ } else if (tdata.input_device == AUDIO_DEVICE_IN_HDMI) {
+ if (strncmp(&buffer[j], "EP92EVT_AUDIO=MEDIA_CONFIG_CHANGE", strlen("EP92EVT_AUDIO=MEDIA_CONFIG_CHANGE")) == 0) {
+ audio_changed = 1;
+ ALOGI("AUDIO CHANGE EVENT: %s\n", &buffer[j]);
+ j += strlen("EP92EVT_AUDIO=MEDIA_CONFIG_CHANGE");
+ continue;
+ } else if (strncmp(&buffer[j], "SEC_SPDIF_TX=MEDIA_CONFIG_CHANGE", strlen("SEC_SPDIF_TX=MEDIA_CONFIG_CHANGE")) == 0) {
+ audio_changed = 1;
+ ALOGI("AUDIO CHANGE EVENT: %s\n", &buffer[j]);
+ j += strlen("SEC_SPDIF_TX=MEDIA_CONFIG_CHANGE");
+ continue;
+ } else if (strncmp(&buffer[j], "EP92EVT_", 8) == 0) {
+ ALOGI("EVENT: %s\n", &buffer[j]);
+ j += 8;
+ continue;
+ }
+ }
+ j++;
+ }
+
+ if (audio_changed)
+ input_restart_check();
+ }
+ } else {
+ ALOGV("NO Data\n");
+ }
+ }
+
+ stop_rec_thread();
+}
+
+void fill_default_params(struct test_data *tdata) {
+ memset(tdata, 0, sizeof(struct test_data));
+
+ tdata->input_device = AUDIO_DEVICE_IN_SPDIF;
+ tdata->bit_width = 24;
+ tdata->source = AUDIO_SOURCE_UNPROCESSED;
+ tdata->record_length = 8 /*sec*/;
+
+ tdata->handle = 0x99A;
+}
+
+void usage() {
+ printf(" \n Command \n");
+ printf(" \n fmt_change_test <options>\n");
+ printf(" \n Options\n");
+ printf(" -d --device <int> - see system/media/audio/include/system/audio.h for device values\n");
+ printf(" spdif_in 2147549184, hdmi_in 2147483680\n");
+ printf(" Optional Argument and Default value is spdif_in\n\n");
+ printf(" -b --bits <int> - Bitwidth in PCM mode (16, 24 or 32), Default is 24\n\n");
+ printf(" -F --flags <int> - Integer value of flags to be used for opening input stream\n\n");
+ printf(" -t --recording-time <in seconds> - Time duration for the recording\n\n");
+ printf(" -l --log-file <FILEPATH> - File path for debug msg, to print\n");
+ printf(" on console use stdout or 1 \n\n");
+ printf(" -h --help - Show this help\n\n");
+ printf(" \n Examples \n");
+ printf(" hdmi_in_event_test -> start a recording stream with default configurations\n\n");
+ printf(" hdmi_in_event_test -d 2147483680 -t 20 -> start a recording session, with device hdmi_in,\n");
+ printf(" record data for 20 secs.\n\n");
+}
+
+static void qti_audio_server_death_notify_cb(void *ctxt) {
+ fprintf(log_file, "qas died\n");
+ fprintf(stderr, "qas died\n");
+ stop_test = true;
+ stop_record = true;
+}
+
+int main(int argc, char* argv[])
+{
+ qahw_module_handle_t *qahw_mod_handle;
+ const char *mod_name = "audio.primary";
+
+ char log_filename[256] = "stdout";
+ int i;
+ int ret = -1;
+
+ log_file = stdout;
+ fill_default_params(&tdata);
+ struct option long_options[] = {
+ /* These options set a flag. */
+ {"device", required_argument, 0, 'd'},
+ {"bits", required_argument, 0, 'b'},
+ {"flags", required_argument, 0, 'F'},
+ {"recording-time", required_argument, 0, 't'},
+ {"log-file", required_argument, 0, 'l'},
+ {"help", no_argument, 0, 'h'},
+ {0, 0, 0, 0}
+ };
+
+ int opt = 0;
+ int option_index = 0;
+ while ((opt = getopt_long(argc,
+ argv,
+ "-d:b:F:t:l:h",
+ long_options,
+ &option_index)) != -1) {
+ switch (opt) {
+ case 'd':
+ tdata.input_device = atoll(optarg);
+ break;
+ case 'b':
+ tdata.bit_width = atoll(optarg);
+ break;
+ case 'F':
+ tdata.flags = atoll(optarg);
+ break;
+ case 't':
+ tdata.record_length = atoi(optarg);
+ break;
+ case 'l':
+ snprintf(log_filename, sizeof(log_filename), "%s", optarg);
+ break;
+ case 'h':
+ usage();
+ return 0;
+ break;
+ }
+ }
+ fprintf(log_file, "registering qas callback");
+ qahw_register_qas_death_notify_cb((audio_error_callback)qti_audio_server_death_notify_cb, context);
+
+ switch (tdata.input_device) {
+ case AUDIO_DEVICE_IN_SPDIF:
+ break;
+ case AUDIO_DEVICE_IN_HDMI:
+ break;
+ default:
+ fprintf(log_file, "device %d not supported\n", tdata.input_device);
+ return -1;
+ }
+
+ switch (tdata.bit_width) {
+ case 16:
+ case 24:
+ case 32:
+ break;
+ default:
+ fprintf(log_file, "bitwidth %d not supported\n", tdata.bit_width);
+ return -1;
+ }
+
+ qahw_mod_handle = qahw_load_module(mod_name);
+ if(qahw_mod_handle == NULL) {
+ fprintf(log_file, " qahw_load_module failed");
+ return -1;
+ }
+ fprintf(log_file, " Starting audio recording test. \n");
+ if (strcasecmp(log_filename, "stdout") && strcasecmp(log_filename, "1")) {
+ if ((log_file = fopen(log_filename,"wb"))== NULL) {
+ fprintf(stderr, "Cannot open log file %s\n", log_filename);
+ /* continue to log to std out */
+ log_file = stdout;
+ }
+ }
+
+ tdata.qahw_mod_handle = qahw_mod_handle;
+
+ /* Register the SIGINT to close the App properly */
+ if (signal(SIGINT, stop_signal_handler) == SIG_ERR)
+ fprintf(log_file, "Failed to register SIGINT:%d\n", errno);
+
+ /* Register the SIGTERM to close the App properly */
+ if (signal(SIGTERM, stop_signal_handler) == SIG_ERR)
+ fprintf(log_file, "Failed to register SIGTERM:%d\n", errno);
+
+ time_t start_time = time(0);
+ double time_elapsed = 0;
+
+ pthread_attr_init(&tdata.poll_event_attr);
+ pthread_attr_setdetachstate(&tdata.poll_event_attr, PTHREAD_CREATE_JOINABLE);
+ poll_event_init();
+ pthread_create(&tdata.poll_event_th, &tdata.poll_event_attr,
+ (void *) listen_uevent, NULL);
+
+ while(true && !stop_test) {
+ time_elapsed = difftime(time(0), start_time);
+ if (tdata.record_length && (time_elapsed > tdata.record_length)) {
+ fprintf(log_file, "\n Test completed.\n");
+ stop_test = true;
+ break;
+ }
+ }
+
+ fprintf(log_file, "\n Stop test \n");
+
+ pthread_join(tdata.poll_event_th, NULL);
+
+ fprintf(log_file, "\n Unload HAL\n");
+
+ ret = qahw_unload_module(qahw_mod_handle);
+ if (ret) {
+ fprintf(log_file, "could not unload hal %d\n", ret);
+ }
+
+ fprintf(log_file, "Done with hal record test\n");
+ if (log_file != stdout) {
+ if (log_file) {
+ fclose(log_file);
+ log_file = NULL;
+ }
+ }
+
+ return 0;
+}
diff --git a/mm-audio/Android.mk b/mm-audio/Android.mk
index 5e46fc1..b02ea48 100644
--- a/mm-audio/Android.mk
+++ b/mm-audio/Android.mk
@@ -1,3 +1,4 @@
+ifneq ($(AUDIO_USE_STUB_HAL), true)
LOCAL_CFLAGS += -Wno-unused-variable
LOCAL_CFLAGS += -Wno-sign-compare
LOCAL_CFLAGS += -Wno-unused-parameter
@@ -12,3 +13,4 @@
ifeq ($(strip $(TARGET_USES_QCOM_MM_AUDIO)),true)
include $(call all-subdir-makefiles)
endif
+endif
diff --git a/post_proc/Android.mk b/post_proc/Android.mk
index 43132eb..637a1f3 100644
--- a/post_proc/Android.mk
+++ b/post_proc/Android.mk
@@ -1,4 +1,4 @@
-
+ifneq ($(AUDIO_USE_STUB_HAL), true)
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
@@ -49,6 +49,10 @@
LOCAL_STATIC_LIBRARIES += libprofile_rt
endif
+ifeq ($(strip $(AUDIO_FEATURE_ENABLED_INSTANCE_ID)), true)
+ LOCAL_CFLAGS += -DINSTANCE_ID_ENABLED
+endif
+
LOCAL_CFLAGS+= -O2 -fvisibility=hidden
ifneq ($(strip $(AUDIO_FEATURE_DISABLED_DTS_EAGLE)),true)
@@ -128,10 +132,6 @@
LOCAL_CFLAGS += -DHW_ACC_HPX
endif
-ifeq ($(strip $(AUDIO_FEATURE_ENABLED_INSTANCE_ID)), true)
- LOCAL_CFLAGS += -DINSTANCE_ID_ENABLED
-endif
-
LOCAL_MODULE:= libhwacceffectswrapper
LOCAL_VENDOR_MODULE := true
@@ -203,3 +203,4 @@
include $(BUILD_SHARED_LIBRARY)
endif
+endif
diff --git a/qahw/Android.mk b/qahw/Android.mk
index 0b782f0..a64b913 100644
--- a/qahw/Android.mk
+++ b/qahw/Android.mk
@@ -1,3 +1,4 @@
+ifneq ($(AUDIO_USE_STUB_HAL), true)
ifeq ($(strip $(BOARD_SUPPORTS_QAHW)),true)
LOCAL_PATH := $(call my-dir)
@@ -37,3 +38,4 @@
include $(BUILD_COPY_HEADERS)
endif
+endif
diff --git a/qahw_api/test/qahw_playback_test.c b/qahw_api/test/qahw_playback_test.c
index 305c186..803242e 100644
--- a/qahw_api/test/qahw_playback_test.c
+++ b/qahw_api/test/qahw_playback_test.c
@@ -2571,6 +2571,7 @@
fprintf(log_file, "stream %d: Output Flags:%d\n", stream->stream_index, stream->flags);
fprintf(log_file, "stream %d: Sample Rate:%d\n", stream->stream_index, stream->config.offload_info.sample_rate);
fprintf(log_file, "stream %d: Channels:%d\n", stream->stream_index, stream->channels);
+ fprintf(log_file, "stream %d: Channel Mask:%x\n", stream->stream_index, stream->config.channel_mask);
fprintf(log_file, "stream %d: Bitwidth:%d\n", stream->stream_index, stream->config.offload_info.bit_width);
fprintf(log_file, "stream %d: AAC Format Type:%d\n", stream->stream_index, stream->aac_fmt_type);
fprintf(log_file, "stream %d: Kvpair Values:%s\n", stream->stream_index, stream->kvpair_values);
diff --git a/visualizer/Android.mk b/visualizer/Android.mk
index 4a53c51..5c663bd 100644
--- a/visualizer/Android.mk
+++ b/visualizer/Android.mk
@@ -12,6 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+ifneq ($(AUDIO_USE_STUB_HAL), true)
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
@@ -61,3 +62,4 @@
LOCAL_CFLAGS += -Wno-unused-local-typedef
include $(BUILD_SHARED_LIBRARY)
+endif
diff --git a/voice_processing/Android.mk b/voice_processing/Android.mk
index 5b865b7..820684a 100644
--- a/voice_processing/Android.mk
+++ b/voice_processing/Android.mk
@@ -1,3 +1,4 @@
+ifneq ($(AUDIO_USE_STUB_HAL), true)
LOCAL_PATH:= $(call my-dir)
# audio preprocessing wrapper
@@ -43,3 +44,4 @@
LOCAL_CFLAGS += -Wno-unused-local-typedef
include $(BUILD_SHARED_LIBRARY)
+endif