Skip to content

Commit 22a1614

Browse files
TE-N-ShengjiuWangbroonie
authored andcommitted
ASoC: fsl_sai: Instantiate snd_soc_dai_driver
Instantiate snd_soc_dai_driver for independent symmetric control. Otherwise the symmetric setting may be overwritten by other instance. Fixes: 08fdf65 ("ASoC: fsl_sai: Add asynchronous mode support") Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com> Link: https://lore.kernel.org/r/1600424760-32071-1-git-send-email-shengjiu.wang@nxp.com Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent b03acae commit 22a1614

2 files changed

Lines changed: 12 additions & 8 deletions

File tree

sound/soc/fsl/fsl_sai.c

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -694,7 +694,7 @@ static int fsl_sai_dai_probe(struct snd_soc_dai *cpu_dai)
694694
return 0;
695695
}
696696

697-
static struct snd_soc_dai_driver fsl_sai_dai = {
697+
static struct snd_soc_dai_driver fsl_sai_dai_template = {
698698
.probe = fsl_sai_dai_probe,
699699
.playback = {
700700
.stream_name = "CPU-Playback",
@@ -966,12 +966,15 @@ static int fsl_sai_probe(struct platform_device *pdev)
966966
return ret;
967967
}
968968

969+
memcpy(&sai->cpu_dai_drv, &fsl_sai_dai_template,
970+
sizeof(fsl_sai_dai_template));
971+
969972
/* Sync Tx with Rx as default by following old DT binding */
970973
sai->synchronous[RX] = true;
971974
sai->synchronous[TX] = false;
972-
fsl_sai_dai.symmetric_rates = 1;
973-
fsl_sai_dai.symmetric_channels = 1;
974-
fsl_sai_dai.symmetric_samplebits = 1;
975+
sai->cpu_dai_drv.symmetric_rates = 1;
976+
sai->cpu_dai_drv.symmetric_channels = 1;
977+
sai->cpu_dai_drv.symmetric_samplebits = 1;
975978

976979
if (of_find_property(np, "fsl,sai-synchronous-rx", NULL) &&
977980
of_find_property(np, "fsl,sai-asynchronous", NULL)) {
@@ -988,9 +991,9 @@ static int fsl_sai_probe(struct platform_device *pdev)
988991
/* Discard all settings for asynchronous mode */
989992
sai->synchronous[RX] = false;
990993
sai->synchronous[TX] = false;
991-
fsl_sai_dai.symmetric_rates = 0;
992-
fsl_sai_dai.symmetric_channels = 0;
993-
fsl_sai_dai.symmetric_samplebits = 0;
994+
sai->cpu_dai_drv.symmetric_rates = 0;
995+
sai->cpu_dai_drv.symmetric_channels = 0;
996+
sai->cpu_dai_drv.symmetric_samplebits = 0;
994997
}
995998

996999
if (of_find_property(np, "fsl,sai-mclk-direction-output", NULL) &&
@@ -1020,7 +1023,7 @@ static int fsl_sai_probe(struct platform_device *pdev)
10201023
regcache_cache_only(sai->regmap, true);
10211024

10221025
ret = devm_snd_soc_register_component(&pdev->dev, &fsl_component,
1023-
&fsl_sai_dai, 1);
1026+
&sai->cpu_dai_drv, 1);
10241027
if (ret)
10251028
goto err_pm_disable;
10261029

sound/soc/fsl/fsl_sai.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ struct fsl_sai {
180180
unsigned int bclk_ratio;
181181

182182
const struct fsl_sai_soc_data *soc_data;
183+
struct snd_soc_dai_driver cpu_dai_drv;
183184
struct snd_dmaengine_dai_dma_data dma_params_rx;
184185
struct snd_dmaengine_dai_dma_data dma_params_tx;
185186
};

0 commit comments

Comments
 (0)