Cristian Ciocaltea 684a2f180e ASoC: es8316: Do not set rate constraints for unsupported MCLKs
[ Upstream commit 60413129ee2b38a80347489270af7f6e1c1de4d0 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-07-27 08:43:49 +02:00
..
2021-03-25 09:04:04 +01:00
2021-05-14 09:50:38 +02:00
2018-02-27 10:41:34 +00:00
2023-02-22 12:55:53 +01:00
2020-01-07 22:29:38 +00:00
2023-03-11 16:40:14 +01:00
2018-04-26 12:44:15 +01:00
2020-01-10 13:31:49 +00:00
2020-01-09 21:22:36 +00:00
2020-09-10 12:49:44 +01:00
2020-05-07 13:18:04 +01:00
2020-05-07 13:18:04 +01:00
2019-07-26 13:10:09 +01:00
2018-05-18 11:20:11 +01:00
2018-06-01 12:05:30 +01:00
2020-07-20 15:34:29 +01:00
2020-10-02 21:05:29 +01:00
2020-05-04 19:23:59 +01:00
2023-01-14 10:16:21 +01:00
2020-05-26 10:55:37 +01:00