<!-- 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_ be first. The 'card' attribute is optional
    and sets the ALSA card number of the mixer device - if not given it
    defaults to 0 -->

	<mixer card="0">

        <!-- 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.
            -->

            <ctl name="DAC1 Switch" val="1" />
            <ctl name="Speaker Enable" val="0"/>
            <ctl name="Jack Enable" val="0"/>
            <ctl name="Codec Config" index="8" val="0x7f,0x54,0xaa,0xaa"/>

        </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 | AUDIO_DEVICE_IN_WIRED_HEADSET
    "headphone"     AUDIO_DEVICE_OUT_WIRED_HEADPHONE
    "sco"           AUDIO_DEVICE_OUT_ALL_SCO | 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="Speaker Enable" val="1"/>
        </path>

        <path name="off">
            <!-- List of ctl element for control values to apply
            when this device is disabled -->
            <ctl name="Speaker Enable" 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="PCM Speaker switch" val="1"/>
        </path>
        <path name="pcm_out_dis">
            <ctl name="PCM Speaker switch" val="0"/>
        </path>
	</device>

	<device name="headphone">
        <path name="on">
            <ctl name="Jack Enable" val="1"/>
        </path>
        <path name="off">
            <ctl name="Jack Enable" val="0"/>
        </path>
        <path name="pcm_out_en">
            <ctl name="PCM Jack switch" val="1"/>
        </path>
        <path name="pcm_out_dis">
            <ctl name="PCM Jack switch" val="0"/>
        </path>
	</device>

<!-- Following the device definitions there must be a <stream> entry
for every output and input stream supported by the 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.

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 where specifying a data type and direction would be meaningless.

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"
    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"
    name    a custom name for the stream (hw streams must be named streams)

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.
-->

    <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>

    </stream>

    <stream type="pcm" dir="in" card="0" device="0">
    </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
    -->
    <stream name="FM radio" type="pcm" dir="in" card="0" device="0">
        <!-- control paths to be enabled when this stream is enabled or disabled -->
        <enable path="fm_radio_en"/>
        <disable path="fm_radio_dis"/>
    </stream>

</audiohal>
