<!-- This file is provided as a reference for writing config files
It does NOT represent any particular device and will NOT work on
real hardware. You must create a file with the correct settings for
your hardware, and the comments here will explain the layout of this
file and expected content.
On the target device this file must be located in /system/etc and named
audio.<device>.xml, where <device> is the string returned by the system
property ro.product.device
-->

<audiohal>

    <!-- mixer element _must_ appear before any of the other definitions.
    The ALSA card can be identified either by card number or by name.
    Connect to ALSA card 0:
        <mixer card="0">
    Connect to ALSA card called "FooSound"
        <mixer name="FooSound">
    When the card is given by name, TinyHAL searches all /proc/asound/card*/id
    files for a matching name.
    -->
        <mixer card="0"> <!-- <mixer name="sdm845" > -->

        <!-- A pre_init element lists control settings that will cause new ALSA
        controls to be added. Typically this is used to load firmware into a
        DSP, causing new ALSA controls to be added for controls exported by the
        firmware. After processing a pre_init element the ALSA controls are
        reloaded to pick up any new controls. Other elements in the
        configuration can then use those controls.
        Multiple pre_init elements can be used, so that a pre_init can depend
        on controls populated by a previous pre_init.
        All pre_init elements must appear before the init element.
        -->

        <pre_init>
            <!-- A list of ctl elements - see description of init element -->
            <!-- <ctl name="DSP1 Preload Switch" val="1" /> -->
        </pre_init>

        <!-- An init element lists control settings required to initialize the
        hardware and driver. These settings are applied only once when the
        library is first loaded during boot.
        -->

        <init>

            <!-- A sequence of ctl elements. Each entry sets a mixer
            control to a given value. The entries are applied in the
            order they are listed here.
            Each entry _must_ have these attributes
                name - name of the ALSA mixer control
                val  - value to set it to
            It can also have an index attribute giving the numeric index
            of the control value to set. This is used where a control
            has multiple value slots (for example a volume control
            with two values, one for left channel and one for right), If
            an index attribute is not given the content of the val attribute
            will be applied to all value slots of the control.
            The numbers in val and index attributes can be given in either
            decimal, or hex (hex is prefixed with 0x). For a control with
            enumerated values the val attribute must be a string
            BYTE ARRAYS: for controls that are a byte array val must be
            a string of comma-separated byte values. This can be shorter
            than the total size of the control, combined with the
            optional index attribute this allows any subset of the byte
            array to be changed. Alternatively, a file attribute can be given
            instead of the val attribute, and the raw byte content of the file
            will be copied into the control. Note that the bytes in the file
            must already be correctly formatted for writing into the ALSA
            control. The file is read once when TinyHAL starts and this
            cached content is used every time this <ctl> element is invoked.
            -->

            <ctl name="QUAT_MI2S_RX Audio Mixer MultiMedia1" val="1" />
            <ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia2" val="1" />
            <ctl name="MultiMedia3 Mixer SLIMBUS_0_TX" val="1" />
            <ctl name="AIF1_CAP Mixer SLIM TX7" val="1" />
            <ctl name="CDC_IF TX7 MUX" val="DEC7" />
            <ctl name="SLIM RX0 MUX" val="AIF1_PB" />
            <ctl name="SLIM RX1 MUX" val="AIF1_PB" />
            <ctl name="SLIM RX2 MUX" val="AIF1_PB" />
            <ctl name="SLIM RX3 MUX" val="AIF1_PB" />
            <ctl name="SLIM RX4 MUX" val="ZERO" />
            <ctl name="SLIM RX5 MUX" val="ZERO" />
            <ctl name="SLIM RX6 MUX" val="ZERO" />
            <ctl name="SLIM RX7 MUX" val="ZERO" />
            <ctl name="RX INT7_1 MIX1 INP0" val="RX0" />
            <ctl name="RX INT8_1 MIX1 INP0" val="RX1" />
            <ctl name="RX INT1_2 MUX" val="RX0" />
            <ctl name="RX INT2_2 MUX" val="RX1" />


        </init>
        </mixer>

<!-- Next you must list all the devices supported by the hardware. The
name attribute of the <device> element identifies the device. These names are
recognized:
    "global"        dummy global device - see explanation below
    "speaker"       AUDIO_DEVICE_OUT_SPEAKER
    "earpiece"      AUDIO_DEVICE_OUT_EARPIECE
    "headset"       AUDIO_DEVICE_OUT_WIRED_HEADSET
    "headset_in"    AUDIO_DEVICE_IN_WIRED_HEADSET
    "headphone"     AUDIO_DEVICE_OUT_WIRED_HEADPHONE
    "sco"           AUDIO_DEVICE_OUT_ALL_SCO
    "sco_in"        AUDIO_DEVICE_IN_ALL_SCO
    "a2dp"          AUDIO_DEVICE_OUT_ALL_A2DP
    "usb"           AUDIO_DEVICE_OUT_ALL_USB
    "mic"           AUDIO_DEVICE_IN_BUILTIN_MIC
    "back mic"      AUDIO_DEVICE_IN_BACK_MIC
    "voice"         AUDIO_DEVICE_IN_VOICE_CALL
    "aux"           AUDIO_DEVICE_IN_AUX_DIGITAL
Within the <device> element you can declare a number of "paths", each path
defines a group of control settings to be applied. Each path is identified by
a name. The "on" and "off" paths are special and list a global enable and
disable setting for the device. Use of devices is reference-counted, when
routing of a stream is changed to use a device that is currently disabled its
"on" path will be applied. When no streams are using a device its "off"
path will be applied.
Other paths are user-defined and you can give them any name you choose.
They are used to apply custom paths when required by a stream and will
be used only when a stream is connected to or disconnected from a
device if the <stream> element has an <enable> or <disable> element requesting
that path.
It is not mandatory to provide paths. You only need to define paths
if there are specific control settings that must be applied. So for example
if no controls need be applied to enable or disable a device then you
do not need to define the "on" and "off" paths.
The <ctl> elements within each path have the same format and behaviour
as described under <mixer><init>.
The "global" device is a special device the represents the audio system as a
whole and is used to invoke mixer settings that are independent of any real
device and which apply globally to the audio system. A stream is automatically
connected to "global" when it is opened and disconnected when it is closed.
The behaviour is identical to the way paths are invoked in any other <device>
entry so the effect is
    - the "on" path will be applied when a stream is opened and there are
        no other streams already open. As an example this could be used to
        bring the audio hardware out of a standby state
    - the "off" path will be applied when the last open stream is closed.
        As an example this could be used to put the audio hardware into a
        standby state
    - the custom paths will be applied when the stream that requests them
        is opened or closed.
-->

        <device name="speaker">
            <path name="on">
                <!-- List of ctl element for control values to apply
                when this device is enabled -->
                <!-- <ctl name="Amp DSP Switch" val="1"/> -->
            </path>

            <path name="off">
                <!-- List of ctl element for control values to apply
                when this device is disabled -->
                <!-- <ctl name="Amp DSP Switch" val="0"/> -->
            </path>

            <!-- Following paths are user-defined and are applied when a
            <stream> elements' routing is changed to add or remove this
            device. If the path name matches the name given in the <stream>
            element it will be applied. A stream could be routed to multiple
            inputs or outputs - the paths for connecting and disconnecting
            a stream to a device must therefore have the same name in each
            <device>.
            It is not mandatory to declare custom paths - depending on your
            hardware there may not be any specific action required to route
            a stream to a particular device. Also you do not have to define
            the path in every device, only the devices where some action must
            be taken to connect or disconnect a stream.
            For this example four custom paths are defined:
                pcm_out_en = control setting to connect PCM output to this device
                pcm_out_dis = control setting to disconnect PCM output from this device
            -->

            <path name="pcm_out_en">
                <ctl name="I2S RX0 MUX" val="AIF1_PB" />
                <ctl name="MI2S_RX Channels" val="One" />
                <ctl name="CDC_IF RX0 MUX" val="I2S RX0" />
                <ctl name="RX INT8_1 MIX1 INP0" val="RX0" />
                <ctl name="COMP8 Switch" val="1" />
                <ctl name="SpkrRight COMP Switch" val="1" />
                <ctl name="SpkrRight BOOST Switch" val="1" />
                <ctl name="SpkrRight VISENSE Switch" val="1" />
                <ctl name="SpkrRight SWR DAC_Port Switch" val="1" />
            </path>
            <path name="pcm_out_dis">
            </path>
        </device>

        <device name="headset">
            <!-- <path name="on">
                <ctl name="SLIM RX2 MUX" val="AIF1_PB"/>
                <ctl name="SLIM RX3 MUX" val="AIF1_PB"/>
                <ctl name="RX INT1 DEM MUX" val="CLSH_DSM_OUT"/>
                <ctl name="RX INT2 DEM MUX" val="CLSH_DSM_OUT"/>
                <ctl name="RX INT1_1 MIX1 INP0" val="RX2"/>
                <ctl name="RX INT2_1 MIX1 INP0" val="RX3"/>
                <ctl name="RX INT1_1 INTERP" val="RX INT1_1 MI"/>
                <ctl name="RX INT2_1 INTERP" val="RX INT2_1 MI"/>
                <ctl name="RX0 Digital Volume" val="0"/>
                <ctl name="RX1 Digital Volume" val="80"/>
                <ctl name="RX2 Digital Volume" val="80"/>
            </path>

            <path name="off">
                <ctl name="SLIM RX2 MUX" val="ZERO"/>
                <ctl name="SLIM RX3 MUX" val="ZERO"/>
                <ctl name="RX INT1 DEM MUX" val="ZERO"/>
                <ctl name="RX INT2 DEM MUX" val="ZERO"/>
                <ctl name="RX INT1_1 MIX1 INP0" val="ZERO"/>
                <ctl name="RX INT2_1 MIX1 INP0" val="ZERO"/>
                <ctl name="RX INT1_1 INTERP" val="ZERO"/>
                <ctl name="RX INT2_1 INTERP" val="ZERO"/>
                <ctl name="RX1 Digital Volume" val="0"/>
                <ctl name="RX2 Digital Volume" val="0"/>
            </path> -->


            <path name="pcm_out_en">
                <ctl name="SLIM RX2 MUX" val="AIF4_PB" />
                <ctl name="SLIM RX3 MUX" val="AIF4_PB" />
                <ctl name="RX INT1_2 MUX" val="RX2" />
                <ctl name="RX INT2_2 MUX" val="RX3" />
            </path>

            <path name="pcm_out_dis">
                <ctl name="SLIM RX2 MUX" val="ZERO" />
                <ctl name="SLIM RX3 MUX" val="ZERO" />
                <ctl name="RX INT1_2 MUX" val="ZERO" />
                <ctl name="RX INT2_2 MUX" val="ZERO" />
            </path>
        </device>

<!-- Following the device definitions there must be a <stream> entry
for every output and input stream supported by the hardware. It is also
possible to define a 'global' stream that is not associated with any particular
audio input or output but instead can be used to handle actions that are
global to the audio hardware.
There are two types of stream that can be declared here:
- anonymous streams, these will be used to supply playback and record
    streams for AudioFlinger
- named streams, which are mainly used to declare custom streams to handle
    special routing use-cases that are external to the normal Android audio
    path - typically where the audio is routed entirely in hardware without
    being passed through Android, for example the baseband audio link or
    FM radio.
    The global stream is a special case of a named stream and must have the
    name "global"
For standard anonymous streams there are two that would normally be on
any device: PCM input and PCM output. It is also possible to declare a stream
as "compress" - this is intended for cases where a playback stream is
decompressed in hardware, or a record stream provides raw compressed data that
must be decompressed in software.
Named streams can be declared as type "hw", to represent a hardware-hardware
link.
The "global" named stream can be used to handle events that are not specific
to any particular stream. Typically this is used to implement usecase handlers
(see below) to handle set_parameter messages sent to the HAL's global
(struct audio_device*)->hw_device.set_parameters function (for example, the
"orientation" parameter that is sent by Android.)
Mandatory attributes for PCM and compressed streams:
    type    must be "pcm" or "compress"
    dir     direction of stream, either "in" (recording) or "out" (playback)
Mandatory for named streams:
    type    must be "pcm", "compress" or "hw"
    dir     direction of stream, either "in" (recording) or "out" (playback)
    name    a custom name for a named stream. The name you choose here must
                match the name your HAL will use to request this stream
Mandatory for hw streams:
    type    must be "hw"
    dir     direction of stream, either "in" (recording) or "out" (playback)
    name    a custom name for the stream (hw streams must be named streams)
Mandatory for the global stream:
    type    must be "hw"
    name    must be "global"
Optional attributes:
    card    ALSA card number. If not given this defaults to 0
    device  ALSA device number. If not given this defaults to 0
    instances   limits the maximum number of instances of this stream, if not
                specified the number of instances is unlimited
    name    a custom name for a named stream. The name you choose here must
                match the name your HAL will use to request this stream
Anonymous PCM streams should not normally have an instance limit.
TinyHAL defines a specific named stream:
"voice recognition" - a PCM or compressed stream for voice recognition input.
                      If a stream with this name is not defined TinyHAL will
                      use the normal PCM input stream for voice recognition audio.
-->

    <stream type="pcm" dir="out" card="0" device="0">
        <!-- The <enable> and <disable> tags give the name of a path
        to apply for each connected device when the stream is either connected
        to (enable) or disconnected from (disable) that device.
        The way this works is that when stream routing changes, the HAL will
        look through the paths of each device this stream is connected to,
            - for each device the stream is being disconnected from, if it
                contains a path matching the path name in <disable>, that path
                will be applied.
            - for each device the stream is being connected to, if it
                contains a path matching the path name in <enable>, that path
                will be applied.
        -->
        <enable path="pcm_out_en"/>
        <disable path="pcm_out_dis"/>

        <!-- The optional usecase block allows you to define custom use-cases that
        are triggered by set_parameter() calls to the HAL. The set_parameter()
        is a string of the form <setting>=<value>. The HAL will search for a
        usecase block whose name attribute matches <setting> and within that
        a case block whose name attribute matches <value>. If a matching case
        block is found the enclosed <ctl> blocks will be applied.
        The example below defines a use case for switching a codec algorithm
        between wideband and narrowband response. The two cases will be
        triggered by a set_parameter() of "bandwidth=narrow" or "bandwidth=wide".
        -->
        <!-- <usecase name="bandwidth">
            <case name="narrow">
                <ctl name="Codec Wideband" val="0" />
            </case>
            <case name="wide">
                <ctl name="Codec Wideband" val="1" />
            </case>
        </usecase> -->

        <!-- Constant values. These allow setting named values that can
        be read by the audio HAL at runtime. Values are 32-bit unsigned.
        This is useful for setting HAL-specific or hardware-specific
        information.
        The names have no meaning to the config manager, and are
        entirely defined by the audio HAL.
        If you want to set constants that are global, rather than part
        of a stream, define a hw stream called "global".
        to hold the values.
        -->
        <!-- <set name="foo" val="42"/> -->

    </stream>

    <stream type="pcm" dir="out" card="0" device="1">
        <enable path="pcm_out_en"/>
        <disable path="pcm_out_dis"/>
    </stream>

    <!-- Example named stream, in this case for an FM radio path . This will not
    be available for standard AudioFlinger playback and record paths. It must
    be explicitly requested by the audio HAL when FM radio is enabled
    -->
    <!-- control paths to be enabled when this stream is enabled or disabled -->
    <!-- <stream name="FM radio" type="pcm" dir="in" card="0" device="0">
        
        <enable path="fm_radio_en"/>
        <disable path="fm_radio_dis"/>
    </stream> -->

</audiohal>
