Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
9f7a949f
Commit
9f7a949f
authored
Oct 24, 2013
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/topic/doc' into asoc-next
parents
70e0db2f
469b7bc4
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
456 additions
and
66 deletions
+456
-66
Documentation/sound/alsa/soc/DPCM.txt
Documentation/sound/alsa/soc/DPCM.txt
+380
-0
Documentation/sound/alsa/soc/codec.txt
Documentation/sound/alsa/soc/codec.txt
+15
-31
Documentation/sound/alsa/soc/dapm.txt
Documentation/sound/alsa/soc/dapm.txt
+41
-30
Documentation/sound/alsa/soc/machine.txt
Documentation/sound/alsa/soc/machine.txt
+4
-2
Documentation/sound/alsa/soc/platform.txt
Documentation/sound/alsa/soc/platform.txt
+16
-3
No files found.
Documentation/sound/alsa/soc/DPCM.txt
0 → 100644
View file @
9f7a949f
This diff is collapsed.
Click to expand it.
Documentation/sound/alsa/soc/codec.txt
View file @
9f7a949f
ASoC Codec Driver
ASoC Codec
Class
Driver
=================
=================
======
The codec driver is generic and hardware independent code that configures the
The codec class driver is generic and hardware independent code that configures
codec to provide audio capture and playback. It should contain no code that is
the codec, FM, MODEM, BT or external DSP to provide audio capture and playback.
specific to the target platform or machine. All platform and machine specific
It should contain no code that is specific to the target platform or machine.
code should be added to the platform and machine drivers respectively.
All platform and machine specific code should be added to the platform and
machine drivers respectively.
Each codec driver *must* provide the following features:-
Each codec
class
driver *must* provide the following features:-
1) Codec DAI and PCM configuration
1) Codec DAI and PCM configuration
2) Codec control IO - using
I2C, 3 Wire(SPI) or both APIs
2) Codec control IO - using
RegMap API
3) Mixers and audio controls
3) Mixers and audio controls
4) Codec audio operations
4) Codec audio operations
5) DAPM description.
6) DAPM event handler.
Optionally, codec drivers can also provide:-
Optionally, codec drivers can also provide:-
5) DAPM description.
6) DAPM event handler.
7) DAC Digital mute control.
7) DAC Digital mute control.
Its probably best to use this guide in conjunction with the existing codec
Its probably best to use this guide in conjunction with the existing codec
...
@@ -64,26 +65,9 @@ struct snd_soc_dai_driver wm8731_dai = {
...
@@ -64,26 +65,9 @@ struct snd_soc_dai_driver wm8731_dai = {
2 - Codec control IO
2 - Codec control IO
--------------------
--------------------
The codec can usually be controlled via an I2C or SPI style interface
The codec can usually be controlled via an I2C or SPI style interface
(AC97 combines control with data in the DAI). The codec drivers provide
(AC97 combines control with data in the DAI). The codec driver should use the
functions to read and write the codec registers along with supplying a
Regmap API for all codec IO. Please see include/linux/regmap.h and existing
register cache:-
codec drivers for example regmap usage.
/* IO control data and register cache */
void *control_data; /* codec control (i2c/3wire) data */
void *reg_cache;
Codec read/write should do any data formatting and call the hardware
read write below to perform the IO. These functions are called by the
core and ALSA when performing DAPM or changing the mixer:-
unsigned int (*read)(struct snd_soc_codec *, unsigned int);
int (*write)(struct snd_soc_codec *, unsigned int, unsigned int);
Codec hardware IO functions - usually points to either the I2C, SPI or AC97
read/write:-
hw_write_t hw_write;
hw_read_t hw_read;
3 - Mixers and audio controls
3 - Mixers and audio controls
...
@@ -127,7 +111,7 @@ Defines a stereo enumerated control
...
@@ -127,7 +111,7 @@ Defines a stereo enumerated control
4 - Codec Audio Operations
4 - Codec Audio Operations
--------------------------
--------------------------
The codec driver also supports the following ALSA operations:-
The codec driver also supports the following ALSA
PCM
operations:-
/* SoC audio ops */
/* SoC audio ops */
struct snd_soc_ops {
struct snd_soc_ops {
...
...
Documentation/sound/alsa/soc/dapm.txt
View file @
9f7a949f
...
@@ -21,7 +21,7 @@ level power systems.
...
@@ -21,7 +21,7 @@ level power systems.
There are 4 power domains within DAPM
There are 4 power domains within DAPM
1. Codec domain - VREF, VMID (core codec and audio power)
1. Codec
bias
domain - VREF, VMID (core codec and audio power)
Usually controlled at codec probe/remove and suspend/resume, although
Usually controlled at codec probe/remove and suspend/resume, although
can be set at stream time if power is not needed for sidetone, etc.
can be set at stream time if power is not needed for sidetone, etc.
...
@@ -63,14 +63,22 @@ Audio DAPM widgets fall into a number of types:-
...
@@ -63,14 +63,22 @@ Audio DAPM widgets fall into a number of types:-
o Line - Line Input/Output (and optional Jack)
o Line - Line Input/Output (and optional Jack)
o Speaker - Speaker
o Speaker - Speaker
o Supply - Power or clock supply widget used by other widgets.
o Supply - Power or clock supply widget used by other widgets.
o Regulator - External regulator that supplies power to audio components.
o Clock - External clock that supplies clock to audio componnents.
o AIF IN - Audio Interface Input (with TDM slot mask).
o AIF OUT - Audio Interface Output (with TDM slot mask).
o Siggen - Signal Generator.
o DAI IN - Digital Audio Interface Input.
o DAI OUT - Digital Audio Interface Output.
o DAI Link - DAI Link between two DAI structures */
o Pre - Special PRE widget (exec before all others)
o Pre - Special PRE widget (exec before all others)
o Post - Special POST widget (exec after all others)
o Post - Special POST widget (exec after all others)
(Widgets are defined in include/sound/soc-dapm.h)
(Widgets are defined in include/sound/soc-dapm.h)
Widgets
are usually added in the codec driver and the machine driver. There are
Widgets
can be added to the sound card by any of the component driver types.
convenience macros defined in soc-dapm.h that can be used to quickly build a
There are convenience macros defined in soc-dapm.h that can be used to quickly
list of widgets of the codecs and machines DAPM widgets.
build a
list of widgets of the codecs and machines DAPM widgets.
Most widgets have a name, register, shift and invert. Some widgets have extra
Most widgets have a name, register, shift and invert. Some widgets have extra
parameters for stream name and kcontrols.
parameters for stream name and kcontrols.
...
@@ -80,11 +88,13 @@ parameters for stream name and kcontrols.
...
@@ -80,11 +88,13 @@ parameters for stream name and kcontrols.
-------------------------
-------------------------
Stream Widgets relate to the stream power domain and only consist of ADCs
Stream Widgets relate to the stream power domain and only consist of ADCs
(analog to digital converters) and DACs (digital to analog converters).
(analog to digital converters), DACs (digital to analog converters),
AIF IN and AIF OUT.
Stream widgets have the following format:-
Stream widgets have the following format:-
SND_SOC_DAPM_DAC(name, stream name, reg, shift, invert),
SND_SOC_DAPM_DAC(name, stream name, reg, shift, invert),
SND_SOC_DAPM_AIF_IN(name, stream, slot, reg, shift, invert)
NOTE: the stream name must match the corresponding stream name in your codec
NOTE: the stream name must match the corresponding stream name in your codec
snd_soc_codec_dai.
snd_soc_codec_dai.
...
@@ -94,6 +104,11 @@ e.g. stream widgets for HiFi playback and capture
...
@@ -94,6 +104,11 @@ e.g. stream widgets for HiFi playback and capture
SND_SOC_DAPM_DAC("HiFi DAC", "HiFi Playback", REG, 3, 1),
SND_SOC_DAPM_DAC("HiFi DAC", "HiFi Playback", REG, 3, 1),
SND_SOC_DAPM_ADC("HiFi ADC", "HiFi Capture", REG, 2, 1),
SND_SOC_DAPM_ADC("HiFi ADC", "HiFi Capture", REG, 2, 1),
e.g. stream widgets for AIF
SND_SOC_DAPM_AIF_IN("AIF1RX", "AIF1 Playback", 0, SND_SOC_NOPM, 0, 0),
SND_SOC_DAPM_AIF_OUT("AIF1TX", "AIF1 Capture", 0, SND_SOC_NOPM, 0, 0),
2.2 Path Domain Widgets
2.2 Path Domain Widgets
-----------------------
-----------------------
...
@@ -121,12 +136,14 @@ If you dont want the mixer elements prefixed with the name of the mixer widget,
...
@@ -121,12 +136,14 @@ If you dont want the mixer elements prefixed with the name of the mixer widget,
you can use SND_SOC_DAPM_MIXER_NAMED_CTL instead. the parameters are the same
you can use SND_SOC_DAPM_MIXER_NAMED_CTL instead. the parameters are the same
as for SND_SOC_DAPM_MIXER.
as for SND_SOC_DAPM_MIXER.
2.3 Platform/Machine domain Widgets
-----------------------------------
2.3 Machine domain Widgets
--------------------------
Machine widgets are different from codec widgets in that they don't have a
Machine widgets are different from codec widgets in that they don't have a
codec register bit associated with them. A machine widget is assigned to each
codec register bit associated with them. A machine widget is assigned to each
machine audio component (non codec) that can be independently powered. e.g.
machine audio component (non codec or DSP) that can be independently
powered. e.g.
o Speaker Amp
o Speaker Amp
o Microphone Bias
o Microphone Bias
...
@@ -146,12 +163,12 @@ static int spitz_mic_bias(struct snd_soc_dapm_widget* w, int event)
...
@@ -146,12 +163,12 @@ static int spitz_mic_bias(struct snd_soc_dapm_widget* w, int event)
SND_SOC_DAPM_MIC("Mic Jack", spitz_mic_bias),
SND_SOC_DAPM_MIC("Mic Jack", spitz_mic_bias),
2.4 Codec Domain
2.4 Codec
(BIAS)
Domain
----------------
----------------
-------
The codec
power domain has no widgets and is handled by the codecs DAPM event
The codec
bias power domain has no widgets and is handled by the codecs DAPM
handler. This handler is called when the codec powerstate is changed wrt to any
event handler. This handler is called when the codec powerstate is changed wrt
stream event or by kernel PM events.
to any
stream event or by kernel PM events.
2.5 Virtual Widgets
2.5 Virtual Widgets
...
@@ -169,15 +186,16 @@ After all the widgets have been defined, they can then be added to the DAPM
...
@@ -169,15 +186,16 @@ After all the widgets have been defined, they can then be added to the DAPM
subsystem individually with a call to snd_soc_dapm_new_control().
subsystem individually with a call to snd_soc_dapm_new_control().
3. Codec Widget Interconnections
3. Codec
/DSP
Widget Interconnections
================================
================================
====
Widgets are connected to each other within the codec
and machine by audio paths
Widgets are connected to each other within the codec
, platform and machine by
(called interconnections). Each interconnection must be defined in order to
audio paths (called interconnections). Each interconnection must be defined in
create a map of all audio paths between widgets.
order to
create a map of all audio paths between widgets.
This is easiest with a diagram of the codec (and schematic of the machine audio
This is easiest with a diagram of the codec or DSP (and schematic of the machine
system), as it requires joining widgets together via their audio signal paths.
audio system), as it requires joining widgets together via their audio signal
paths.
e.g., from the WM8731 output mixer (wm8731.c)
e.g., from the WM8731 output mixer (wm8731.c)
...
@@ -247,16 +265,9 @@ machine and includes the codec. e.g.
...
@@ -247,16 +265,9 @@ machine and includes the codec. e.g.
o Mic Jack
o Mic Jack
o Codec Pins
o Codec Pins
When a codec pin is NC it can be marked as not used with a call to
Endpoints are added to the DAPM graph so that their usage can be determined in
order to save power. e.g. NC codecs pins will be switched OFF, unconnected
snd_soc_dapm_set_endpoint(codec, "Widget Name", 0);
jacks can also be switched OFF.
The last argument is 0 for inactive and 1 for active. This way the pin and its
input widget will never be powered up and consume power.
This also applies to machine widgets. e.g. if a headphone is connected to a
jack then the jack can be marked active. If the headphone is removed, then
the headphone jack can be marked inactive.
5 DAPM Widget Events
5 DAPM Widget Events
...
...
Documentation/sound/alsa/soc/machine.txt
View file @
9f7a949f
ASoC Machine Driver
ASoC Machine Driver
===================
===================
The ASoC machine (or board) driver is the code that glues together the platform
The ASoC machine (or board) driver is the code that glues together all the
and codec drivers.
component drivers (e.g. codecs, platforms and DAIs). It also describes the
relationships between each componnent which include audio paths, GPIOs,
interrupts, clocking, jacks and voltage regulators.
The machine driver can contain codec and platform specific code. It registers
The machine driver can contain codec and platform specific code. It registers
the audio subsystem with the kernel as a platform device and is represented by
the audio subsystem with the kernel as a platform device and is represented by
...
...
Documentation/sound/alsa/soc/platform.txt
View file @
9f7a949f
ASoC Platform Driver
ASoC Platform Driver
====================
====================
An ASoC platform driver c
an be divided into audio DMA and SoC DAI configuration
An ASoC platform driver c
lass can be divided into audio DMA drivers, SoC DAI
and control. The platform drivers only target the SoC CPU and must have no board
drivers and DSP drivers. The platform drivers only target the SoC CPU and must
specific code.
have no board
specific code.
Audio DMA
Audio DMA
=========
=========
...
@@ -64,3 +64,16 @@ Each SoC DAI driver must provide the following features:-
...
@@ -64,3 +64,16 @@ Each SoC DAI driver must provide the following features:-
5) Suspend and resume (optional)
5) Suspend and resume (optional)
Please see codec.txt for a description of items 1 - 4.
Please see codec.txt for a description of items 1 - 4.
SoC DSP Drivers
===============
Each SoC DSP driver usually supplies the following features :-
1) DAPM graph
2) Mixer controls
3) DMA IO to/from DSP buffers (if applicable)
4) Definition of DSP front end (FE) PCM devices.
Please see DPCM.txt for a description of item 4.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment