ASoC: soc-pcm: add dpcm_runtime_setup_fe()
dpcm_fe_dai_startup() (= A) calls dpcm_set_fe_runtime() (= B) to setup DPCM runtime. From *naming point of view*, it sounds like setup function for FE. (A) static int dpcm_fe_dai_startup(...) { ... (B) dpcm_set_fe_runtime(...); ... } But in dpcm_set_fe_runtime() (= B), It setups FE by for_each loop (= X), and setups BE by dpcm_runtime_merge_xxx() (= Y). (B) static void dpcm_set_fe_runtime(...) { ... ^ for_each_rtd_cpu_dais(...) { | ... (X) soc_pcm_hw_update_rate(...); | soc_pcm_hw_update_chan(...); | soc_pcm_hw_update_format(...); v } ^ dpcm_runtime_merge_format(...); (Y) dpcm_runtime_merge_chan(...); v dpcm_runtime_merge_rate(...); } These means that the function which is called as xxx_fe_xxx() is setups both FE and BE. This is confusable and can be hot bed for bug. To tidyup it, as 1st step, this patch adds new dpcm_runtime_setup_fe() for (X). Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Link: https://lore.kernel.org/r/87pn0tvsgx.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
7f4a763642
commit
5f53898af1
|
@ -1526,6 +1526,36 @@ unwind:
|
|||
return err;
|
||||
}
|
||||
|
||||
static void dpcm_runtime_setup_fe(struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct snd_soc_pcm_runtime *fe = asoc_substream_to_rtd(substream);
|
||||
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||
struct snd_pcm_hardware *hw = &runtime->hw;
|
||||
struct snd_soc_dai *dai;
|
||||
int stream = substream->stream;
|
||||
int i;
|
||||
|
||||
soc_pcm_hw_init(hw);
|
||||
|
||||
for_each_rtd_cpu_dais(fe, i, dai) {
|
||||
struct snd_soc_pcm_stream *cpu_stream;
|
||||
|
||||
/*
|
||||
* Skip CPUs which don't support the current stream
|
||||
* type. See soc_pcm_init_runtime_hw() for more details
|
||||
*/
|
||||
if (!snd_soc_dai_stream_valid(dai, stream))
|
||||
continue;
|
||||
|
||||
cpu_stream = snd_soc_dai_get_pcm_stream(dai, stream);
|
||||
|
||||
soc_pcm_hw_update_rate(hw, cpu_stream);
|
||||
soc_pcm_hw_update_chan(hw, cpu_stream);
|
||||
soc_pcm_hw_update_format(hw, cpu_stream);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void dpcm_runtime_merge_format(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_runtime *runtime)
|
||||
{
|
||||
|
@ -1651,29 +1681,8 @@ static void dpcm_runtime_merge_rate(struct snd_pcm_substream *substream,
|
|||
static void dpcm_set_fe_runtime(struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||
struct snd_pcm_hardware *hw = &runtime->hw;
|
||||
struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
|
||||
struct snd_soc_dai *cpu_dai;
|
||||
int i;
|
||||
|
||||
soc_pcm_hw_init(hw);
|
||||
|
||||
for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
|
||||
struct snd_soc_pcm_stream *stream;
|
||||
|
||||
/*
|
||||
* Skip CPUs which don't support the current stream
|
||||
* type. See soc_pcm_init_runtime_hw() for more details
|
||||
*/
|
||||
if (!snd_soc_dai_stream_valid(cpu_dai, substream->stream))
|
||||
continue;
|
||||
|
||||
stream = snd_soc_dai_get_pcm_stream(cpu_dai, substream->stream);
|
||||
|
||||
soc_pcm_hw_update_rate(hw, stream);
|
||||
soc_pcm_hw_update_chan(hw, stream);
|
||||
soc_pcm_hw_update_format(hw, stream);
|
||||
}
|
||||
dpcm_runtime_setup_fe(substream);
|
||||
|
||||
dpcm_runtime_merge_format(substream, runtime);
|
||||
dpcm_runtime_merge_chan(substream, runtime);
|
||||
|
|
Loading…
Reference in New Issue