[PATCH 0/7] ASoC: core: Create new components in sane state
From: Cezary Rojewski
Date: Wed Oct 07 2026 - 09:45:16 EST
There is a gap between snd_soc_component_alloc() and
snd_soc_register_component(). A driver that obtains a component object
through snd_soc_component_alloc() receives an object in uninitialized
state. soc_component_initialize() is the function responsible for
bringing it into a sane one but it is not accessible by the framework
users. Example of the uninitialized members are the lists e.g.:
comp->dai_list.
The framework shall prevent manipulation of uninitialized components.
Introduce snd_soc_component_new() which acts as a constructor: allocates
and initializes the component object before returning it to the caller.
Given the quite recent discussion related to all things
component-register [1], decided to stick to the "register" wording and
renamed soc_component_add() to snd_soc_component_register(). With that,
register/unregister pattern is kept. At the same time, the update
brings a clear division between:
1) snd_soc_component_register(component..)
2) snd_soc_register_component(dev..)
A driver uses 1) when operating on pre-constructed component object
explicitly and 2) when they want the ASoC framework to do everything for
them.
Parameter "name" is added to the ctor parameter list as it is one of the
fields that is always initialized, see the 'if (!component->name)'
within soc_component_initialize(). Private data on the other hand is
not so opted out of including it. And thus snd_soc_component_set_priv()
remains intact.
[1]: https://lore.kernel.org/all/87y0f2rz8l.wl-kuninori.morimoto.gx@xxxxxxxxxxx/
Cezary Rojewski (7):
ASoC: core: Add component constructor
ASoC: core: Rename and export soc_component_add()
ASoC: dmaengine: Switch to snd_snd_component_new()
ASoC: topology-test: Switch to snd_snd_component_new()
ASoC: Intel: catpt: Switch to snd_snd_component_new()
ASoC: Intel: avs: Switch to snd_snd_component_new()
ASoC: core: Remove unused component-register members
include/sound/soc-component.h | 7 ++-
include/sound/soc.h | 8 +--
sound/soc/intel/avs/pcm.c | 11 ++--
sound/soc/intel/avs/probes.c | 12 ++---
sound/soc/intel/catpt/pcm.c | 12 ++---
sound/soc/soc-component.c | 19 -------
sound/soc/soc-core.c | 77 ++++++++++++---------------
sound/soc/soc-generic-dmaengine-pcm.c | 18 +++----
sound/soc/soc-topology-test.c | 66 +++++++++++------------
9 files changed, 96 insertions(+), 134 deletions(-)
--
2.34.1