]>
Commit | Line | Data |
---|---|---|
eb1a6af3 LG |
1 | ALSA SoC Layer |
2 | ============== | |
3 | ||
7c4dbbd8 MB |
4 | The overall project goal of the ALSA System on Chip (ASoC) layer is to |
5 | provide better ALSA support for embedded system-on-chip processors (e.g. | |
6 | pxa2xx, au1x00, iMX, etc) and portable audio codecs. Prior to the ASoC | |
7 | subsystem there was some support in the kernel for SoC audio, however it | |
8 | had some limitations:- | |
eb1a6af3 | 9 | |
7c4dbbd8 MB |
10 | * Codec drivers were often tightly coupled to the underlying SoC |
11 | CPU. This is not ideal and leads to code duplication - for example, | |
12 | Linux had different wm8731 drivers for 4 different SoC platforms. | |
eb1a6af3 | 13 | |
7c4dbbd8 | 14 | * There was no standard method to signal user initiated audio events (e.g. |
01dd2fbf ML |
15 | Headphone/Mic insertion, Headphone/Mic detection after an insertion |
16 | event). These are quite common events on portable devices and often require | |
17 | machine specific code to re-route audio, enable amps, etc., after such an | |
18 | event. | |
eb1a6af3 | 19 | |
7c4dbbd8 MB |
20 | * Drivers tended to power up the entire codec when playing (or |
21 | recording) audio. This is fine for a PC, but tends to waste a lot of | |
22 | power on portable devices. There was also no support for saving | |
23 | power via changing codec oversampling rates, bias currents, etc. | |
eb1a6af3 LG |
24 | |
25 | ||
26 | ASoC Design | |
27 | =========== | |
28 | ||
29 | The ASoC layer is designed to address these issues and provide the following | |
30 | features :- | |
31 | ||
32 | * Codec independence. Allows reuse of codec drivers on other platforms | |
33 | and machines. | |
34 | ||
7c4dbbd8 | 35 | * Easy I2S/PCM audio interface setup between codec and SoC. Each SoC |
a33f3224 | 36 | interface and codec registers its audio interface capabilities with the |
7c4dbbd8 MB |
37 | core and are subsequently matched and configured when the application |
38 | hardware parameters are known. | |
eb1a6af3 LG |
39 | |
40 | * Dynamic Audio Power Management (DAPM). DAPM automatically sets the codec to | |
7c4dbbd8 | 41 | its minimum power state at all times. This includes powering up/down |
eb1a6af3 LG |
42 | internal power blocks depending on the internal codec audio routing and any |
43 | active streams. | |
44 | ||
45 | * Pop and click reduction. Pops and clicks can be reduced by powering the | |
46 | codec up/down in the correct sequence (including using digital mute). ASoC | |
47 | signals the codec when to change power states. | |
48 | ||
49 | * Machine specific controls: Allow machines to add controls to the sound card | |
7c4dbbd8 | 50 | (e.g. volume control for speaker amplifier). |
eb1a6af3 LG |
51 | |
52 | To achieve all this, ASoC basically splits an embedded audio system into 3 | |
53 | components :- | |
54 | ||
55 | * Codec driver: The codec driver is platform independent and contains audio | |
7c4dbbd8 | 56 | controls, audio interface capabilities, codec DAPM definition and codec IO |
eb1a6af3 LG |
57 | functions. |
58 | ||
7c4dbbd8 | 59 | * Platform driver: The platform driver contains the audio DMA engine and audio |
eb1a6af3 LG |
60 | interface drivers (e.g. I2S, AC97, PCM) for that platform. |
61 | ||
62 | * Machine driver: The machine driver handles any machine specific controls and | |
01dd2fbf | 63 | audio events (e.g. turning on an amp at start of playback). |
eb1a6af3 LG |
64 | |
65 | ||
66 | Documentation | |
67 | ============= | |
68 | ||
69 | The documentation is spilt into the following sections:- | |
70 | ||
71 | overview.txt: This file. | |
72 | ||
73 | codec.txt: Codec driver internals. | |
74 | ||
75 | DAI.txt: Description of Digital Audio Interface standards and how to configure | |
76 | a DAI within your codec and CPU DAI drivers. | |
77 | ||
78 | dapm.txt: Dynamic Audio Power Management | |
79 | ||
80 | platform.txt: Platform audio DMA and DAI. | |
81 | ||
82 | machine.txt: Machine driver internals. | |
83 | ||
84 | pop_clicks.txt: How to minimise audio artifacts. | |
85 | ||
7c4dbbd8 | 86 | clocking.txt: ASoC clocking for best power performance. |