Unverified Commit 62a7b3bb authored by Richard Fitzgerald's avatar Richard Fitzgerald Committed by Mark Brown
Browse files

ASoC: SOF: ipc4-pcm: Fix incorrect comparison with number of tdm_slots



In ipc4_ssp_dai_config_pcm_params_match() when comparing params_channels()
against hw_config->tdm_slots the comparison should be a <= not a ==.

The number of TDM slots must be enough for the number of required channels.
But it can be greater. There are various reason why a I2S/TDM link has more
TDM slots than a particular audio stream needs.

The original comparison would fail on systems that had more TDM slots.

Signed-off-by: default avatarRichard Fitzgerald <rf@opensource.cirrus.com>
Fixes: 8a07944a ("ASoC: SOF: ipc4-pcm: Look for best matching hw_config for SSP")
Link: https://patch.msgid.link/20250819160525.423416-1-rf@opensource.cirrus.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 1dd28fd8
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -639,14 +639,14 @@ static int ipc4_ssp_dai_config_pcm_params_match(struct snd_sof_dev *sdev,

		if (params_rate(params) == le32_to_cpu(hw_config->fsync_rate) &&
		    params_width(params) == le32_to_cpu(hw_config->tdm_slot_width) &&
		    params_channels(params) == le32_to_cpu(hw_config->tdm_slots)) {
		    params_channels(params) <= le32_to_cpu(hw_config->tdm_slots)) {
			current_config = le32_to_cpu(hw_config->id);
			partial_match = false;
			/* best match found */
			break;
		} else if (current_config < 0 &&
			   params_rate(params) == le32_to_cpu(hw_config->fsync_rate) &&
			   params_channels(params) == le32_to_cpu(hw_config->tdm_slots)) {
			   params_channels(params) <= le32_to_cpu(hw_config->tdm_slots)) {
			current_config = le32_to_cpu(hw_config->id);
			partial_match = true;
			/* keep looking for better match */