<!-- 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="headphone">
            <!-- <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">
    </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>
