Skip to content

Commit

Permalink
ASoC: doc: dapm: describe how widgets and routes are registered
Browse files Browse the repository at this point in the history
The small paragraph describing how to register widgets is incomplete (does
not mention routes) and mentions snd_soc_dapm_new_control() which is not
really used. Moreover it appears as a part of the "Virtual Widgets"
subsection.

Replace it with a detailed and current description of how widgets and
routes are registered, mentioning both static declaration and runtime
registration. Also make this a section on its own.

Reviewed-by: Alexandre Belloni <[email protected]>
Reviewed-by: Bagas Sanjaya <[email protected]>
Signed-off-by: Luca Ceresoli <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Mark Brown <[email protected]>
  • Loading branch information
lucaceresoli authored and broonie committed Apr 29, 2024
1 parent dd5f36e commit 36de8c0
Showing 1 changed file with 36 additions and 2 deletions.
38 changes: 36 additions & 2 deletions Documentation/sound/soc/dapm.rst
Original file line number Diff line number Diff line change
Expand Up @@ -250,8 +250,42 @@ a virtual widget - a widget with no control bits e.g.

This can be used to merge two signal paths together in software.

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().
Registering DAPM controls
=========================

In many cases the DAPM widgets implemented statically in a ``static const
struct snd_soc_dapm_widget`` array and the routes connecting them in a
``static const struct snd_soc_dapm_route`` array in a codec driver, and
simply declared via the ``dapm_widgets`` and ``num_dapm_widgets`` fields of
the ``struct snd_soc_component_driver`` so the driver registration will
take care of populating them::

static const struct snd_soc_dapm_widget wm2000_dapm_widgets[] = {
SND_SOC_DAPM_OUTPUT("SPKN"),
SND_SOC_DAPM_OUTPUT("SPKP"),
...
};

/* Target, Path, Source */
static const struct snd_soc_dapm_route wm2000_audio_map[] = {
{ "SPKN", NULL, "ANC Engine" },
{ "SPKP", NULL, "ANC Engine" },
...
};

static const struct snd_soc_component_driver soc_component_dev_wm2000 = {
...
.dapm_widgets = wm2000_dapm_widgets,
.num_dapm_widgets = ARRAY_SIZE(wm2000_dapm_widgets),
...
};

In more complex cases the list of DAPM widgets and/or routes can be only
known at build time. This happens for example when a driver supports
different models having a different set of features. In those cases
separate widgets and routes arrays implementing the case-specific features
can be registered programmatically by calling snd_soc_dapm_new_controls()
and snd_soc_dapm_add_routes().


Codec/DSP Widget Interconnections
Expand Down

0 comments on commit 36de8c0

Please sign in to comment.