]> www.infradead.org Git - users/hch/misc.git/commitdiff
ASoC: soc-dapm: use dapm->component instead of container_of()
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Thu, 4 Sep 2025 05:21:17 +0000 (05:21 +0000)
committerMark Brown <broonie@kernel.org>
Thu, 18 Sep 2025 21:24:11 +0000 (22:24 +0100)
Because struct snd_soc_dapm_context is soc-dapm framework specific, user
driver don't need to access its member directly, we would like to hide
them. struct snd_soc_dapm_context will be removed from header in the
future.

Now, snd_soc_dapm_to_component() (A) will convert dapm to component by
container_of() (a).

(A) static inline struct snd_soc_component *snd_soc_dapm_to_component(
struct snd_soc_dapm_context *dapm)
{
(a) return container_of(dapm, struct snd_soc_component, dapm);
}

dapm of component works, but dapm of card will be "unknown" pointer
(= not NULL), because (a) is using "container_of()".

OTOH, ASoC will call snd_soc_dapm_init() (X) to initialize dapm, and
it will be called from snd_soc_bind_card() (p) (for card) or
soc_probe_component() (q) (for component) with component pointer.

(p) static int snd_soc_bind_card(...)
{
...
(X) snd_soc_dapm_init(..., NULL);
...                    ^^^^
}

(q) static int soc_probe_component(...)
{
...
(X) snd_soc_dapm_init(..., component);
...                 ^^^^^^^^^
}

And snd_soc_dapm_init() (X) will fill dapm->component (x)

(X) void snd_soc_dapm_init(..., component, ...)
{
...
(x) dapm->component = component;
...
}

We can simply use dapm->component in snd_soc_dapm_to_component() (A).
In this case, dapm of card (p) will be just NULL.

Use dapm->component instead of container_of().
The picky note can be removed by this patch.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://patch.msgid.link/87a53ax06q.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
include/sound/soc-component.h
include/sound/soc-dapm.h
sound/soc/soc-dapm.c

index 48e45cbe82e53b98fb4eddbb062e192bd9e05c16..7322d5d4c0bdcfb4645649ca9845967e7f9799d1 100644 (file)
@@ -260,21 +260,6 @@ struct snd_soc_component {
 #define for_each_component_dais_safe(component, dai, _dai)\
        list_for_each_entry_safe(dai, _dai, &(component)->dai_list, list)
 
-/**
- * snd_soc_dapm_to_component() - Casts a DAPM context to the component it is
- *  embedded in
- * @dapm: The DAPM context to cast to the component
- *
- * This function must only be used on DAPM contexts that are known to be part of
- * a component (e.g. in a component driver). Otherwise the behavior is
- * undefined.
- */
-static inline struct snd_soc_component *snd_soc_dapm_to_component(
-       struct snd_soc_dapm_context *dapm)
-{
-       return container_of(dapm, struct snd_soc_component, dapm);
-}
-
 /**
  * snd_soc_component_get_dapm() - Returns the DAPM context associated with a
  *  component
index dbb71e396febe578c7882053514d151d0808abf1..c6470d391eeffa5df16baa3c37ef3e3bb1db3e2c 100644 (file)
@@ -662,6 +662,7 @@ int snd_soc_dapm_update_dai(struct snd_pcm_substream *substream,
 int snd_soc_dapm_widget_name_cmp(struct snd_soc_dapm_widget *widget, const char *s);
 struct device *snd_soc_dapm_to_dev(struct snd_soc_dapm_context *dapm);
 struct snd_soc_card *snd_soc_dapm_to_card(struct snd_soc_dapm_context *dapm);
+struct snd_soc_component *snd_soc_dapm_to_component(struct snd_soc_dapm_context *dapm);
 
 /* dapm path setup */
 int snd_soc_dapm_new_widgets(struct snd_soc_card *card);
index cd8d3857988622c19f9b245537ce0f859a5ee89a..4550bf33add27225158ae8f4fd82e80afb4eb45a 100644 (file)
@@ -180,6 +180,12 @@ struct snd_soc_card *snd_soc_dapm_to_card(struct snd_soc_dapm_context *dapm)
 }
 EXPORT_SYMBOL_GPL(snd_soc_dapm_to_card);
 
+struct snd_soc_component *snd_soc_dapm_to_component(struct snd_soc_dapm_context *dapm)
+{
+       return dapm->component;
+}
+EXPORT_SYMBOL_GPL(snd_soc_dapm_to_component);
+
 static bool dapm_dirty_widget(struct snd_soc_dapm_widget *w)
 {
        return !list_empty(&w->dirty);