[PATCH 0/3] ASoC: fsl-asoc-card: Restructure to support deferrable card binding
From: Chancel Liu <hidden>
Date: 2026-08-10 09:38:46
Also in:
linux-sound, lkml
From: Chancel Liu <redacted> The ASoC core has evolved over several kernel releases to support deferrable card binding: when a component is not yet available, devm_snd_soc_register_card() no longer propagates -EPROBE_DEFER back to the machine driver. Instead the card is placed on an internal deferred list and rebound automatically once the missing component registers. As a result, registering a sound card no longer guarantees that all CPU and codec components have already probed successfully. This exposed two regressions in fsl-asoc-card: 1. The machine driver caches codec MCLK rate during probe(). On platforms where the MCLK is derived from the CPU DAI clock and its final rate is applied via assigned-clocks in the CPU DAI node, probing before the CPU DAI driver completes leaves fsl-asoc-card with a stale mclk_freq. 2. If a card defers due to a missing component, it queues the card onto the unbind_card_list and returns 0. The driver then proceeds to call simple_util_init_jack(). At this point, the snd_card pointer is NULL. Patch 1 drops mclk management for nau8822 from this machine driver. Patch 2 is a pure refactoring with no functional change. the large if/else chain of of_device_is_compatible() calls in probe() is replaced by a platform data table approach. Patch 3 moves all component-dependent initialisation and jacks out of probe() and into late_probe(), which is the correct place under the deferrable binding model. Chancel Liu (3): ASoC: fsl-asoc-card: Drop mclk management for nau8822 ASoC: fsl-asoc-card: Move static compatible data to platform data ASoC: fsl-asoc-card: Move bound-component setup to late_probe sound/soc/fsl/fsl-asoc-card.c | 728 ++++++++++++++++++++++------------ 1 file changed, 465 insertions(+), 263 deletions(-) -- 2.50.1