diff options
author | Cristian Ciocaltea <cristian.ciocaltea@collabora.com> | 2023-05-30 21:11:39 +0300 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2023-05-30 19:22:29 +0100 |
commit | 60413129ee2b38a80347489270af7f6e1c1de4d0 (patch) | |
tree | 8a8c65db75d2dc22c1c3ab3af1997845c8073f37 /sound/soc/sof/topology.c | |
parent | 6f073429037cd79d7311cd8236311c53f5ea8f01 (diff) | |
download | linux-stable-60413129ee2b38a80347489270af7f6e1c1de4d0.tar.gz linux-stable-60413129ee2b38a80347489270af7f6e1c1de4d0.tar.bz2 linux-stable-60413129ee2b38a80347489270af7f6e1c1de4d0.zip |
ASoC: es8316: Do not set rate constraints for unsupported MCLKs
When using the codec through the generic audio graph card, there are at
least two calls of es8316_set_dai_sysclk(), with the effect of limiting
the allowed sample rates according to the MCLK/LRCK ratios supported by
the codec:
1. During audio card setup, to set the initial MCLK - see
asoc_simple_init_dai().
2. Before opening a stream, to update MCLK, according to the stream
sample rate and the multiplication factor - see
asoc_simple_hw_params().
In some cases the initial MCLK might be set to a frequency that doesn't
match any of the supported ratios, e.g. 12287999 instead of 12288000,
which is only 1 Hz below the supported clock, as that is what the
hardware reports. This creates an empty list of rate constraints, which
is further passed to snd_pcm_hw_constraint_list() via
es8316_pcm_startup(), and causes the following error on the very first
access of the sound card:
$ speaker-test -D hw:Analog,0 -F S16_LE -c 2 -t wav
Broken configuration for playback: no configurations available: Invalid argument
Setting of hwparams failed: Invalid argument
Note that all subsequent retries succeed thanks to the updated MCLK set
at point 2 above, which uses a computed frequency value instead of a
reading from the hardware registers. Normally this would have mitigated
the issue, but es8316_pcm_startup() executes before the 2nd call to
es8316_set_dai_sysclk(), hence it cannot make use of the updated
constraints.
Since es8316_pcm_hw_params() performs anyway a final validation of MCLK
against the stream sample rate and the supported MCLK/LRCK ratios, fix
the issue by ensuring that sysclk_constraints list is only set when at
least one supported sample rate is autodetected by the codec.
Fixes: b8b88b70875a ("ASoC: add es8316 codec driver")
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
Link: https://lore.kernel.org/r/20230530181140.483936-3-cristian.ciocaltea@collabora.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/sof/topology.c')
0 files changed, 0 insertions, 0 deletions