Skip to content

Commit 1ad7f52

Browse files
TE-N-ShengjiuWanggregkh
authored andcommitted
ASoC: fsl_sai: Instantiate snd_soc_dai_driver
[ Upstream commit 22a1614 ] 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 <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Mark Brown <[email protected]> Signed-off-by: Sasha Levin <[email protected]>
1 parent 56c1c45 commit 1ad7f52

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

sound/soc/fsl/fsl_sai.c

+11-8
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",
@@ -965,12 +965,15 @@ static int fsl_sai_probe(struct platform_device *pdev)
965965
return ret;
966966
}
967967

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

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

995998
if (of_find_property(np, "fsl,sai-mclk-direction-output", NULL) &&
@@ -1018,7 +1021,7 @@ static int fsl_sai_probe(struct platform_device *pdev)
10181021
pm_runtime_enable(&pdev->dev);
10191022

10201023
ret = devm_snd_soc_register_component(&pdev->dev, &fsl_component,
1021-
&fsl_sai_dai, 1);
1024+
&sai->cpu_dai_drv, 1);
10221025
if (ret)
10231026
goto err_pm_disable;
10241027

sound/soc/fsl/fsl_sai.h

+1
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)