ALSA SoC Layer
==============

The overall project goal of the ALSA System on Chip (ASoC) layer is to provide
better ALSA support for embedded system on chip procesors (e.g. pxa2xx, au1x00,
iMX, etc) and portable audio codecs. Currently there is some support in the
kernel for SoC audio, however it has some limitations:-

  * Currently, codec drivers are often tightly coupled to the underlying SoC
    cpu. This is not ideal and leads to code duplication i.e. Linux now has 4
    different wm8731 drivers for 4 different SoC platforms.

  * There is no standard method to signal user initiated audio events.
    e.g. Headphone/Mic insertion, Headphone/Mic detection after an insertion
    event. These are quite common events on portable devices and ofter require
    machine specific code to re route audio, enable amps etc after such an event.

  * Current drivers tend to power up the entire codec when playing
    (or recording) audio. This is fine for a PC, but tends to waste a lot of
    power on portable devices. There is also no support for saving power via
    changing codec oversampling rates, bias currents, etc.


ASoC Design
===========

The ASoC layer is designed to address these issues and provide the following
features :-

  * Codec independence. Allows reuse of codec drivers on other platforms
    and machines.

  * Easy I2S/PCM audio interface setup between codec and SoC. Each SoC interface
    and codec registers it's audio interface capabilities with the core and are
    subsequently matched and configured when the application hw params are known.

  * Dynamic Audio Power Management (DAPM). DAPM automatically sets the codec to
    it's minimum power state at all times. This includes powering up/down
    internal power blocks depending on the internal codec audio routing and any
    active streams.

  * Pop and click reduction. Pops and clicks can be reduced by powering the
    codec up/down in the correct sequence (including using digital mute). ASoC
    signals the codec when to change power states.

  * Machine specific controls: Allow machines to add controls to the sound card
    e.g. volume control for speaker amp.

To achieve all this, ASoC basically splits an embedded audio system into 3
components :-

  * Codec driver: The codec driver is platform independent and contains audio
    controls, audio interface capabilities, codec dapm definition and codec IO
    functions.

  * Platform driver: The platform driver contains the audio dma engine and audio
    interface drivers (e.g. I2S, AC97, PCM) for that platform.

  * Machine driver: The machine driver handles any machine specific controls and
    audio events. i.e. turing on an amp at start of playback.


Documentation
=============

The documentation is spilt into the following sections:-

overview.txt: This file.

codec.txt: Codec driver internals.

DAI.txt: Description of Digital Audio Interface standards and how to configure
a DAI within your codec and CPU DAI drivers.

dapm.txt: Dynamic Audio Power Management

platform.txt: Platform audio DMA and DAI.

machine.txt: Machine driver internals.

pop_clicks.txt: How to minimise audio artifacts.

clocking.txt: ASoC clocking for best power performance.