From: Alexander Stein <alexander.stein@ew.tq-group.com>
To: broonie@kernel.org, Cezary Rojewski <cezary.rojewski@intel.com>
Cc: tiwai@suse.com, perex@perex.cz, amade@asmblr.net,
kuninori.morimoto.gx@renesas.com, linux-sound@vger.kernel.org,
Cezary Rojewski <cezary.rojewski@intel.com>
Subject: Re: [PATCH] ASoC: core: Move all users to deferrable card binding
Date: Wed, 20 May 2026 11:55:39 +0200 [thread overview]
Message-ID: <3045975.e9J7NaK4W3@steina-w> (raw)
In-Reply-To: <20260430140752.766130-1-cezary.rojewski@intel.com>
Hi,
Am Donnerstag, 30. April 2026, 16:07:52 CEST schrieb Cezary Rojewski:
> Commit a3375522bb5e2 ("ASoC: core: Complete support for card rebinding")
> completed the feature and at the same time divided ASoC users into two
> groups:
>
> 1) cards that fail to enumerate the moment one of the components is
> not available
> 2) cards that succeed to enumerate even if some of their components
> become available late
>
> Given the component-based nature of ASoC, approach 2) is preferred and
> can be used by all ASoC users. By dropping 1) the card binding code can
> also be simplified.
>
> Flatten code that is currently conditional based on ->devres_dev and
> convert snd_soc_rebind_card() to call_soc_bind_card(). The latter is a
> selector between managed and unmanaged card-binding behaviour to keep
> non-devm users happy.
>
> With rebinding being the default, devm_snd_soc_register_card() takes
> form of its deferrable friend - all the devm job is already done by
> devm_snd_soc_bind_card().
>
> Suggested-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
This showed up in linux-next and causes a regression on my imx8mp-based
platform (imx8mp-tqma8mpql-mba8mpxl.dts).
On 7.1.0-rc3-00101-g56ba969925ac eveythings works as expected and sound
cards are registered.
On 7.1.0-rc3-00102-g42d99857d6f0 I'm getting these messages/errors:
fsl-asoc-card sound: ASoC: CPU DAI (null) not registered
tlv320aic32x4 1-0018: ASoC error (-22): at snd_soc_dai_set_sysclk() on tlv320aic32x4-hifi
fsl-asoc-card sound: failed to set sysclk in fsl_asoc_card_late_probe
fsl-asoc-card sound: ASoC error (-22): at snd_soc_card_late_probe() on tqm-tlv320aic32
The clock tree looks like this:
audio_pll1_ref_sel 0 0 0 24000000
audio_pll1 0 0 0 393216000
audio_pll1_bypass 0 0 0 393216000
audio_pll1_out 0 0 0 393216000
sai3 0 0 0 12288000
sai3_mclk1_sel 0 0 0 12288000
sai3_mclk1_cg 0 0 0 12288000
pll 0 0 0 49152000
codec_clkin 0 0 0 49152000
nadc 0 0 0 49152000
madc 0 0 0 49152000
ndac 0 0 0 49152000
mdac 0 0 0 49152000
bdiv 0 0 0 49152000
Adding some debug output the offending call is
tlv320aic32x4 1-0018: set sai3_mclk1_cg to freq: 24000000
Apparently this was not happening before.
best regards,
Alexander
> ---
>
> This is a direct continuation of subject [1] begun by Kuninori with goal
> of simplifying the code related to card rebinding.
>
> [1]: https://lore.kernel.org/linux-sound/87eck7k868.wl-kuninori.morimoto.gx@renesas.com/
>
> include/sound/soc.h | 2 +-
> sound/soc/soc-core.c | 44 ++++++++++++++----------------------------
> sound/soc/soc-devres.c | 28 +--------------------------
> 3 files changed, 17 insertions(+), 57 deletions(-)
>
> diff --git a/include/sound/soc.h b/include/sound/soc.h
> index a30f95ff7d86..f0935523c8df 100644
> --- a/include/sound/soc.h
> +++ b/include/sound/soc.h
> @@ -425,7 +425,7 @@ struct snd_soc_jack_pin;
> int snd_soc_register_card(struct snd_soc_card *card);
> void snd_soc_unregister_card(struct snd_soc_card *card);
> int devm_snd_soc_register_card(struct device *dev, struct snd_soc_card *card);
> -int devm_snd_soc_register_deferrable_card(struct device *dev, struct snd_soc_card *card);
> +#define devm_snd_soc_register_deferrable_card(d, c) devm_snd_soc_register_card(d, c)
> #ifdef CONFIG_PM_SLEEP
> int snd_soc_suspend(struct device *dev);
> int snd_soc_resume(struct device *dev);
> diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
> index e70bf22db5c9..ec141b810b50 100644
> --- a/sound/soc/soc-core.c
> +++ b/sound/soc/soc-core.c
> @@ -2165,6 +2165,7 @@ static int snd_soc_bind_card(struct snd_soc_card *card)
> snd_soc_fill_dummy_dai(card);
>
> snd_soc_dapm_init(dapm, card, NULL);
> + list_del_init(&card->list);
>
> /* check whether any platform is ignore machine FE and using topology */
> soc_check_tplg_fes(card);
> @@ -2308,6 +2309,10 @@ static int snd_soc_bind_card(struct snd_soc_card *card)
> probe_end:
> if (ret < 0)
> soc_cleanup_card_resources(card);
> + if (ret == -EPROBE_DEFER) {
> + list_add(&card->list, &unbind_card_list);
> + ret = 0;
> + }
> snd_soc_card_mutex_unlock(card);
>
> return ret;
> @@ -2323,12 +2328,15 @@ static int devm_snd_soc_bind_card(struct device *dev, struct snd_soc_card *card)
> struct snd_soc_card **ptr;
> int ret;
>
> + /* The procedure may be called many times during the lifetime of the card. */
> + devres_destroy(dev, devm_card_bind_release, NULL, NULL);
> +
> ptr = devres_alloc(devm_card_bind_release, sizeof(*ptr), GFP_KERNEL);
> if (!ptr)
> return -ENOMEM;
>
> ret = snd_soc_bind_card(card);
> - if (ret == 0 || ret == -EPROBE_DEFER) {
> + if (ret == 0) {
> *ptr = card;
> devres_add(dev, ptr);
> } else {
> @@ -2338,21 +2346,11 @@ static int devm_snd_soc_bind_card(struct device *dev, struct snd_soc_card *card)
> return ret;
> }
>
> -static int snd_soc_rebind_card(struct snd_soc_card *card)
> +static int call_soc_bind_card(struct snd_soc_card *card)
> {
> - int ret;
> -
> - if (card->devres_dev) {
> - devres_destroy(card->devres_dev, devm_card_bind_release, NULL, NULL);
> - ret = devm_snd_soc_bind_card(card->devres_dev, card);
> - } else {
> - ret = snd_soc_bind_card(card);
> - }
> -
> - if (ret != -EPROBE_DEFER)
> - list_del_init(&card->list);
> -
> - return ret;
> + if (card->devres_dev)
> + return devm_snd_soc_bind_card(card->devres_dev, card);
> + return snd_soc_bind_card(card);
> }
>
> /* probes a new socdev */
> @@ -2550,8 +2548,6 @@ EXPORT_SYMBOL_GPL(snd_soc_add_dai_controls);
> */
> int snd_soc_register_card(struct snd_soc_card *card)
> {
> - int ret;
> -
> if (!card->name || !card->dev)
> return -EINVAL;
>
> @@ -2578,17 +2574,7 @@ int snd_soc_register_card(struct snd_soc_card *card)
>
> guard(mutex)(&client_mutex);
>
> - if (card->devres_dev) {
> - ret = devm_snd_soc_bind_card(card->devres_dev, card);
> - if (ret == -EPROBE_DEFER) {
> - list_add(&card->list, &unbind_card_list);
> - ret = 0;
> - }
> - } else {
> - ret = snd_soc_bind_card(card);
> - }
> -
> - return ret;
> + return call_soc_bind_card(card);
> }
> EXPORT_SYMBOL_GPL(snd_soc_register_card);
>
> @@ -2909,7 +2895,7 @@ int snd_soc_add_component(struct snd_soc_component *component,
> list_add(&component->list, &component_list);
>
> list_for_each_entry_safe(card, c, &unbind_card_list, list)
> - snd_soc_rebind_card(card);
> + call_soc_bind_card(card);
>
> err_cleanup:
> if (ret < 0)
> diff --git a/sound/soc/soc-devres.c b/sound/soc/soc-devres.c
> index d33f83ec24f2..718165ba84ac 100644
> --- a/sound/soc/soc-devres.c
> +++ b/sound/soc/soc-devres.c
> @@ -49,11 +49,6 @@ int devm_snd_soc_register_component(struct device *dev,
> }
> EXPORT_SYMBOL_GPL(devm_snd_soc_register_component);
>
> -static void devm_card_release(struct device *dev, void *res)
> -{
> - snd_soc_unregister_card(*(struct snd_soc_card **)res);
> -}
> -
> /**
> * devm_snd_soc_register_card - resource managed card registration
> * @dev: Device used to manage card
> @@ -63,32 +58,11 @@ static void devm_card_release(struct device *dev, void *res)
> * unregistered.
> */
> int devm_snd_soc_register_card(struct device *dev, struct snd_soc_card *card)
> -{
> - struct snd_soc_card **ptr;
> - int ret;
> -
> - ptr = devres_alloc(devm_card_release, sizeof(*ptr), GFP_KERNEL);
> - if (!ptr)
> - return -ENOMEM;
> -
> - ret = snd_soc_register_card(card);
> - if (ret == 0) {
> - *ptr = card;
> - devres_add(dev, ptr);
> - } else {
> - devres_free(ptr);
> - }
> -
> - return ret;
> -}
> -EXPORT_SYMBOL_GPL(devm_snd_soc_register_card);
> -
> -int devm_snd_soc_register_deferrable_card(struct device *dev, struct snd_soc_card *card)
> {
> card->devres_dev = dev;
> return snd_soc_register_card(card);
> }
> -EXPORT_SYMBOL_GPL(devm_snd_soc_register_deferrable_card);
> +EXPORT_SYMBOL_GPL(devm_snd_soc_register_card);
>
> #ifdef CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM
>
>
--
TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
Amtsgericht München, HRB 105018
Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
http://www.tq-group.com/
next prev parent reply other threads:[~2026-05-20 9:55 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-30 14:07 [PATCH] ASoC: core: Move all users to deferrable card binding Cezary Rojewski
2026-05-11 1:06 ` Mark Brown
2026-05-11 1:34 ` Kuninori Morimoto
2026-05-12 8:14 ` Rojewski, Cezary
2026-05-20 9:55 ` Alexander Stein [this message]
2026-05-20 10:33 ` Cezary Rojewski
2026-05-21 6:42 ` Alexander Stein
2026-05-21 8:13 ` Cezary Rojewski
2026-05-21 10:11 ` Alexander Stein
2026-05-21 14:41 ` Cezary Rojewski
2026-05-21 14:47 ` Alexander Stein
2026-05-22 11:21 ` Alexander Stein
2026-05-22 10:16 ` Péter Ujfalusi
2026-05-22 14:32 ` Cezary Rojewski
2026-05-22 14:58 ` Mark Brown
2026-05-22 15:08 ` Cezary Rojewski
2026-05-25 12:48 ` Péter Ujfalusi
2026-05-25 15:06 ` Mark Brown
2026-05-26 5:45 ` Péter Ujfalusi
2026-05-26 11:21 ` Péter Ujfalusi
2026-05-26 11:28 ` Péter Ujfalusi
2026-05-26 16:02 ` Mark Brown
2026-05-27 5:22 ` Péter Ujfalusi
2026-05-27 10:35 ` Mark Brown
2026-05-25 10:44 ` Pierre-Louis Bossart
2026-05-25 21:10 ` Cezary Rojewski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3045975.e9J7NaK4W3@steina-w \
--to=alexander.stein@ew.tq-group.com \
--cc=amade@asmblr.net \
--cc=broonie@kernel.org \
--cc=cezary.rojewski@intel.com \
--cc=kuninori.morimoto.gx@renesas.com \
--cc=linux-sound@vger.kernel.org \
--cc=perex@perex.cz \
--cc=tiwai@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.