ASoC: simple-card-utils: Unify clock direction by clk_direction
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Thu, 12 Dec 2024 01:57:55 +0000 (01:57 +0000)
committerMark Brown <broonie@kernel.org>
Mon, 16 Dec 2024 12:31:29 +0000 (12:31 +0000)
Original sample-card assumes SND_SOC_CLOCK_IN is used for
snd_soc_dai_set_sysclk(), but someday, Codec uses SND_SOC_CLOCK_IN
and CPU uses SND_SOC_CLOCK_OUT at hw_params(), and dai->clk_direction
is used at simple_init_dai().

There is no uniformity today. Let's use dai->clk_direction for all cases.

Fortunately, almost all DAI doesn't care about "dir"
(= SND_SOC_CLOCK_IN/OUT) in .set_sysclk callback function (which is called
in snd_soc_dai_set_sysclk()), so this patch has no effect in such DAIs.

But this patch might breaks some existing Sound Card. Use
"system-clock-direction-out" property if it needs to use SND_SOC_CLOCK_OUT

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://patch.msgid.link/87y10lu0gx.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/generic/simple-card-utils.c

index 6c5a1c5a6b3b2df0d2590c0dc39732987eafcc0e..a0c3111f7e08d624ce9a8c33b4a1d0213cccf50d 100644 (file)
@@ -365,8 +365,7 @@ void simple_util_shutdown(struct snd_pcm_substream *substream)
                struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, i);
 
                if (props->mclk_fs && !dai->clk_fixed && !snd_soc_dai_active(cpu_dai))
-                       snd_soc_dai_set_sysclk(cpu_dai,
-                                              0, 0, SND_SOC_CLOCK_OUT);
+                       snd_soc_dai_set_sysclk(cpu_dai, 0, 0, dai->clk_direction);
 
                simple_clk_disable(dai);
        }
@@ -374,8 +373,7 @@ void simple_util_shutdown(struct snd_pcm_substream *substream)
                struct snd_soc_dai *codec_dai = snd_soc_rtd_to_codec(rtd, i);
 
                if (props->mclk_fs && !dai->clk_fixed && !snd_soc_dai_active(codec_dai))
-                       snd_soc_dai_set_sysclk(codec_dai,
-                                              0, 0, SND_SOC_CLOCK_IN);
+                       snd_soc_dai_set_sysclk(codec_dai, 0, 0, dai->clk_direction);
 
                simple_clk_disable(dai);
        }
@@ -483,13 +481,15 @@ int simple_util_hw_params(struct snd_pcm_substream *substream,
                }
 
                for_each_rtd_codec_dais(rtd, i, sdai) {
-                       ret = snd_soc_dai_set_sysclk(sdai, 0, mclk, SND_SOC_CLOCK_IN);
+                       pdai = simple_props_to_dai_codec(props, i);
+                       ret = snd_soc_dai_set_sysclk(sdai, 0, mclk, pdai->clk_direction);
                        if (ret && ret != -ENOTSUPP)
                                return ret;
                }
 
                for_each_rtd_cpu_dais(rtd, i, sdai) {
-                       ret = snd_soc_dai_set_sysclk(sdai, 0, mclk, SND_SOC_CLOCK_OUT);
+                       pdai = simple_props_to_dai_cpu(props, i);
+                       ret = snd_soc_dai_set_sysclk(sdai, 0, mclk, pdai->clk_direction);
                        if (ret && ret != -ENOTSUPP)
                                return ret;
                }