Dynamic Audio Power Managment for Portable Devices
==================================================

Dynamic Audio Power Managment (DAPM) is designed to allow portable Linux devices
to use the minimum amount of power within the audio subsystem at all times. It
is independent of other kernel PM and as such, can easily co-exist with the 
other PM systems.

DAPM is also completely transparent to all user space applications as all power
switching is done within the ASoC core. No code changes or recompiling are
required for user space applications. DAPM makes power switching desicions based
upon any audio stream (capture/playback) activity and audio mixer settings
within the device.

DAPM spans the whole machine. It covers power control within the entire audio
subsystem, this includes internal codec power blocks and machine level power
systems.

There are 4 power domains within DAPM 

   1. Codec domain - VREF, VMID
      Usually controlled at codec probe/remove and suspend/resume, although 
      can be set at stream time if power is not needed for sidetone, etc.
      
   2. Platform/Machine domain - physically connected inputs and outputs
      Is platform/machine and user action specific, is set in the .asoundrc file and
      by userspace e.g when HP are inserted
      
   3. Path domain - Internal codec path mixers
      Are automatically set when mixer and mux settings are
      changed by the user.
      
   4. Stream domain - DAC's and ADC's.
      Enabled when stream playback/capture is started.  


All DAPM power switching descisons are made automatically by consulting an audio
routing map of the whole machine. This map is specific to each machine and 
consists of the interconnections between every audio component (including
internal codec components). All audio components that effect power are called
widgets hereafter.

Audio widgets fall into a number of types:-

 o Mixer      - Mixes several analog signals into a single analog signal.
 o Mux        - An analog switch that outputs only 1 of it's inputs.
 o Volume     - A gain or attenuation widget. Also called a PGA.
 o ADC        - Analog to Digital Converter
 o DAC        - Digital to Analog Converter
 o Switch     - An analog switch
 o Input      - A codec input pin
 o Output     - A codec output pin
 o Headphone  - Headphone (and optional Jack)
 o Mic        - Mic (and optional Jack)
 o Line       - Line Input/Output (and optional Jack)
 o Speaker    - Speaker

Each widget is defined in include/sound/soc-dpm.h

  