The Advanced Linux Sound Architecture (ALSA), now the most popular architecture in
Linux system, provides audio and MIDI functionality to the Linux operating
system.
ALSA has the following significant features:
- Efficient support for all types of audio interfaces, from consumer sound
cards to professional multichannel audio interfaces.
- Fully modularized sound drivers.
- SMP and thread-safe design.
- User space library (alsa-lib) to simplify application programming and
provide higher level functionality.
- Support for the older Open Sound System (OSS) API, providing binary
compatibility for most OSS programs.
ALSA System on Chip (ASoC) layer is designed for SoC audio. The overall project goal
of the ASoC layer provides better ALSA support for embedded system on chip
processors and portable audio CODECs.
The ASoC layer also provides 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 its audio interface capabilities with the core.
- Dynamic Audio Power Management (DAPM). DAPM is an ASoC technology designed
to minimize audio subsystem power consumption no matter what audio-use case
is active. DAPM guarantees the lowest audio power state at all times and is
completely transparent to user space audio components. DAPM is ideal for
mobile devices or devices with complex audio requirements.
- 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,
for example, volume control for speaker amp.
ASoC splits an embedded audio system into multiple re-usable component drivers:
- Codec class drivers: The codec class driver is platform independent and
contains audio controls, audio interface capabilities, codec DAPM definition
and codec IO functions. This class extends to BT, FM and MODEM ICs if
required. Codec class drivers should be generic code that can run on any
architecture and machine.
- Platform class drivers: The platform class driver includes the audio DMA
engine driver, digital audio interface (DAI) drivers (e.g. I2S, AC97, PCM)
and any audio DSP drivers for that platform.
- Machine class driver: The machine driver class acts as the glue that
describes and binds the other component drivers together to form an ALSA
“sound card device”. It handles any machine specific controls and machine
level audio events (e.g. turning on an amp at start of playback).
More detailed information about ASoC can be found in the Linux kernel documentation
in the Linux OS source tree at linux/Documentation/sound/alsa/soc and at www.alsa-project.org/main/index.php/ASoC.