2006-10-06 12:34:51 -04:00
|
|
|
ALSA SoC Layer
|
|
|
|
==============
|
|
|
|
|
|
|
|
The overall project goal of the ALSA System on Chip (ASoC) layer is to provide
|
2007-10-19 19:34:40 -04:00
|
|
|
better ALSA support for embedded system-on-chip processors (e.g. pxa2xx, au1x00,
|
2006-10-06 12:34:51 -04:00
|
|
|
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
|
2007-10-19 19:34:40 -04:00
|
|
|
CPU. This is not ideal and leads to code duplication i.e. Linux now has 4
|
2006-10-06 12:34:51 -04:00
|
|
|
different wm8731 drivers for 4 different SoC platforms.
|
|
|
|
|
2007-10-19 19:34:40 -04:00
|
|
|
* 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 often require
|
|
|
|
machine specific code to re-route audio, enable amps, etc., after such an
|
|
|
|
event.
|
2006-10-06 12:34:51 -04:00
|
|
|
|
|
|
|
* 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
|
2007-10-19 19:34:40 -04:00
|
|
|
(e.g. volume control for speaker amp).
|
2006-10-06 12:34:51 -04:00
|
|
|
|
|
|
|
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
|
2007-10-19 19:34:40 -04:00
|
|
|
audio events (e.g. turning on an amp at start of playback).
|
2006-10-06 12:34:51 -04:00
|
|
|
|
|
|
|
|
|
|
|
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.
|