On Tue, Sep 22, 2026 at 11:34:27AM +0800, [email protected] wrote: > From: Shengjiu Wang <[email protected]> > > The i.MX ASRC hardware supports three independent conversion pairs > (A, B, C). The driver previously registered a single DAI with generic > stream names "ASRC-Playback" and "ASRC-Capture", which prevents > multiple independent conversion paths from being used simultaneously. > > Replace the single fsl_asrc_dai instance with an array of three DAI > drivers to allow up to three independent conversion paths to be active > at the same time: > > asrc-0 -- ASRC-Playback / ASRC-Capture (backward compatible) > asrc-1 -- ASRC1-Playback / ASRC1-Capture > asrc-2 -- ASRC2-Playback / ASRC2-Capture > > asrc-0 retains the original generic stream names to preserve backward > compatibility with existing machine drivers and board configurations. > Each DAI retains the same channel, rate and format capabilities as the > original. Update the devm_snd_soc_register_component() call to register > all three DAIs. > > Signed-off-by: Shengjiu Wang <[email protected]> > ---
Reviewed-by: Frank Li <[email protected]> > sound/soc/fsl/fsl_asrc.c | 89 +++++++++++++++++++++++++++++++--------- > 1 file changed, 69 insertions(+), 20 deletions(-) > > diff --git a/sound/soc/fsl/fsl_asrc.c b/sound/soc/fsl/fsl_asrc.c > index 6007786aca66..56604fa1613a 100644 > --- a/sound/soc/fsl/fsl_asrc.c > +++ b/sound/soc/fsl/fsl_asrc.c > @@ -792,27 +792,76 @@ static const struct snd_soc_dai_ops fsl_asrc_dai_ops = { > SNDRV_PCM_FMTBIT_S16_LE | \ > SNDRV_PCM_FMTBIT_S24_3LE) > > -static struct snd_soc_dai_driver fsl_asrc_dai = { > - .playback = { > - .stream_name = "ASRC-Playback", > - .channels_min = 1, > - .channels_max = 10, > - .rate_min = 5512, > - .rate_max = 192000, > - .rates = SNDRV_PCM_RATE_KNOT, > - .formats = FSL_ASRC_FORMATS | > - SNDRV_PCM_FMTBIT_S8, > +static struct snd_soc_dai_driver fsl_asrc_dai[] = { > + { > + .name = "asrc-0", > + .playback = { > + .stream_name = "ASRC-Playback", > + .channels_min = 1, > + .channels_max = 10, > + .rate_min = 5512, > + .rate_max = 192000, > + .rates = SNDRV_PCM_RATE_KNOT, > + .formats = FSL_ASRC_FORMATS | > + SNDRV_PCM_FMTBIT_S8, > + }, > + .capture = { > + .stream_name = "ASRC-Capture", > + .channels_min = 1, > + .channels_max = 10, > + .rate_min = 5512, > + .rate_max = 192000, > + .rates = SNDRV_PCM_RATE_KNOT, > + .formats = FSL_ASRC_FORMATS, > + }, > + .ops = &fsl_asrc_dai_ops, > + }, > + { > + .name = "asrc-1", > + .playback = { > + .stream_name = "ASRC1-Playback", > + .channels_min = 1, > + .channels_max = 10, > + .rate_min = 5512, > + .rate_max = 192000, > + .rates = SNDRV_PCM_RATE_KNOT, > + .formats = FSL_ASRC_FORMATS | > + SNDRV_PCM_FMTBIT_S8, > + }, > + .capture = { > + .stream_name = "ASRC1-Capture", > + .channels_min = 1, > + .channels_max = 10, > + .rate_min = 5512, > + .rate_max = 192000, > + .rates = SNDRV_PCM_RATE_KNOT, > + .formats = FSL_ASRC_FORMATS, > + }, > + .ops = &fsl_asrc_dai_ops, > }, > - .capture = { > - .stream_name = "ASRC-Capture", > - .channels_min = 1, > - .channels_max = 10, > - .rate_min = 5512, > - .rate_max = 192000, > - .rates = SNDRV_PCM_RATE_KNOT, > - .formats = FSL_ASRC_FORMATS, > + { > + .name = "asrc-2", > + .playback = { > + .stream_name = "ASRC2-Playback", > + .channels_min = 1, > + .channels_max = 10, > + .rate_min = 5512, > + .rate_max = 192000, > + .rates = SNDRV_PCM_RATE_KNOT, > + .formats = FSL_ASRC_FORMATS | > + SNDRV_PCM_FMTBIT_S8, > + }, > + .capture = { > + .stream_name = "ASRC2-Capture", > + .channels_min = 1, > + .channels_max = 10, > + .rate_min = 5512, > + .rate_max = 192000, > + .rates = SNDRV_PCM_RATE_KNOT, > + .formats = FSL_ASRC_FORMATS, > + }, > + .ops = &fsl_asrc_dai_ops, > }, > - .ops = &fsl_asrc_dai_ops, > }; > > static bool fsl_asrc_readable_reg(struct device *dev, unsigned int reg) > @@ -1393,7 +1442,7 @@ static int fsl_asrc_probe(struct platform_device *pdev) > goto err_pm_get_sync; > > ret = devm_snd_soc_register_component(&pdev->dev, &fsl_asrc_component, > - &fsl_asrc_dai, 1); > + fsl_asrc_dai, > ARRAY_SIZE(fsl_asrc_dai)); > if (ret) { > dev_err(&pdev->dev, "failed to register ASoC DAI\n"); > goto err_pm_get_sync; > -- > 2.34.1 > >
