ASoC: soc-pcm: add soc_pcm_set_dai_params()
Getting rate/channels/sample_bits from param needs fixed method. This patch adds new soc_pcm_set_dai_params() and replace existing code. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Link: https://lore.kernel.org/r/87y2i47uyw.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
a7e20444ef
commit
2805b8bd3e
@ -329,6 +329,20 @@ int dpcm_dapm_stream_event(struct snd_soc_pcm_runtime *fe, int dir,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void soc_pcm_set_dai_params(struct snd_soc_dai *dai,
|
||||
struct snd_pcm_hw_params *params)
|
||||
{
|
||||
if (params) {
|
||||
dai->rate = params_rate(params);
|
||||
dai->channels = params_channels(params);
|
||||
dai->sample_bits = snd_pcm_format_physical_width(params_format(params));
|
||||
} else {
|
||||
dai->rate = 0;
|
||||
dai->channels = 0;
|
||||
dai->sample_bits = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int soc_pcm_apply_symmetry(struct snd_pcm_substream *substream,
|
||||
struct snd_soc_dai *soc_dai)
|
||||
{
|
||||
@ -390,13 +404,12 @@ static int soc_pcm_params_symmetry(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params)
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
|
||||
struct snd_soc_dai d;
|
||||
struct snd_soc_dai *dai;
|
||||
struct snd_soc_dai *cpu_dai;
|
||||
unsigned int rate, channels, sample_bits, symmetry, i;
|
||||
unsigned int symmetry, i;
|
||||
|
||||
rate = params_rate(params);
|
||||
channels = params_channels(params);
|
||||
sample_bits = snd_pcm_format_physical_width(params_format(params));
|
||||
soc_pcm_set_dai_params(&d, params);
|
||||
|
||||
/* reject unmatched parameters when applying symmetry */
|
||||
symmetry = rtd->dai_link->symmetric_rates;
|
||||
@ -406,9 +419,9 @@ static int soc_pcm_params_symmetry(struct snd_pcm_substream *substream,
|
||||
|
||||
if (symmetry) {
|
||||
for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
|
||||
if (cpu_dai->rate && cpu_dai->rate != rate) {
|
||||
if (cpu_dai->rate && cpu_dai->rate != d.rate) {
|
||||
dev_err(rtd->dev, "ASoC: unmatched rate symmetry: %d - %d\n",
|
||||
cpu_dai->rate, rate);
|
||||
cpu_dai->rate, d.rate);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
@ -422,9 +435,9 @@ static int soc_pcm_params_symmetry(struct snd_pcm_substream *substream,
|
||||
if (symmetry) {
|
||||
for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
|
||||
if (cpu_dai->channels &&
|
||||
cpu_dai->channels != channels) {
|
||||
cpu_dai->channels != d.channels) {
|
||||
dev_err(rtd->dev, "ASoC: unmatched channel symmetry: %d - %d\n",
|
||||
cpu_dai->channels, channels);
|
||||
cpu_dai->channels, d.channels);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
@ -438,9 +451,9 @@ static int soc_pcm_params_symmetry(struct snd_pcm_substream *substream,
|
||||
if (symmetry) {
|
||||
for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
|
||||
if (cpu_dai->sample_bits &&
|
||||
cpu_dai->sample_bits != sample_bits) {
|
||||
cpu_dai->sample_bits != d.sample_bits) {
|
||||
dev_err(rtd->dev, "ASoC: unmatched sample bits symmetry: %d - %d\n",
|
||||
cpu_dai->sample_bits, sample_bits);
|
||||
cpu_dai->sample_bits, d.sample_bits);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
@ -898,11 +911,8 @@ static int soc_pcm_hw_clean(struct snd_pcm_substream *substream, int rollback)
|
||||
for_each_rtd_dais(rtd, i, dai) {
|
||||
int active = snd_soc_dai_stream_active(dai, substream->stream);
|
||||
|
||||
if (snd_soc_dai_active(dai) == 1) {
|
||||
dai->rate = 0;
|
||||
dai->channels = 0;
|
||||
dai->sample_bits = 0;
|
||||
}
|
||||
if (snd_soc_dai_active(dai) == 1)
|
||||
soc_pcm_set_dai_params(dai, NULL);
|
||||
|
||||
if (active == 1)
|
||||
snd_soc_dai_digital_mute(dai, 1, substream->stream);
|
||||
@ -999,11 +1009,7 @@ static int soc_pcm_hw_params(struct snd_pcm_substream *substream,
|
||||
if(ret < 0)
|
||||
goto out;
|
||||
|
||||
codec_dai->rate = params_rate(&codec_params);
|
||||
codec_dai->channels = params_channels(&codec_params);
|
||||
codec_dai->sample_bits = snd_pcm_format_physical_width(
|
||||
params_format(&codec_params));
|
||||
|
||||
soc_pcm_set_dai_params(codec_dai, &codec_params);
|
||||
snd_soc_dapm_update_dai(substream, &codec_params, codec_dai);
|
||||
}
|
||||
|
||||
@ -1020,11 +1026,7 @@ static int soc_pcm_hw_params(struct snd_pcm_substream *substream,
|
||||
goto out;
|
||||
|
||||
/* store the parameters for each DAI */
|
||||
cpu_dai->rate = params_rate(params);
|
||||
cpu_dai->channels = params_channels(params);
|
||||
cpu_dai->sample_bits =
|
||||
snd_pcm_format_physical_width(params_format(params));
|
||||
|
||||
soc_pcm_set_dai_params(cpu_dai, params);
|
||||
snd_soc_dapm_update_dai(substream, params, cpu_dai);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user