summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaciej Strozek <mstrozek@opensource.cirrus.com>2026-04-02 09:45:31 +0300
committerMark Brown <broonie@kernel.org>2026-04-06 15:23:32 +0300
commit1de6ddcddc954a69f96b1c23205e03ddd603e3c8 (patch)
treeb30dae40c3844a3ece7a24eeef7cc9d853a7ab35
parent86facd80a2a37536937f06de637abf9e8cabdb4b (diff)
downloadlinux-1de6ddcddc954a69f96b1c23205e03ddd603e3c8.tar.xz
ASoC: SOF: Intel: fix iteration in is_endpoint_present()
is_endpoint_present() iterates over sdca_data.num_functions, but checks the dai_type according to codec info list, which will cause problems if not all endpoints from the codec info list are present. Make sure the type of actually present functions is compared against target dai_type. Fixes: 5226d19d4cae ("ASoC: SOF: Intel: use sof_sdw as default SDW machine driver") Signed-off-by: Maciej Strozek <mstrozek@opensource.cirrus.com> Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Link: https://patch.msgid.link/20260402064531.2287261-3-yung-chuan.liao@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r--sound/soc/sof/intel/hda.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/sound/soc/sof/intel/hda.c b/sound/soc/sof/intel/hda.c
index 57632b464117..8a240dcb7fcb 100644
--- a/sound/soc/sof/intel/hda.c
+++ b/sound/soc/sof/intel/hda.c
@@ -1133,8 +1133,7 @@ static void hda_generic_machine_select(struct snd_sof_dev *sdev,
#if IS_ENABLED(CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE)
-static bool is_endpoint_present(struct sdw_slave *sdw_device,
- struct asoc_sdw_codec_info *dai_info, int dai_type)
+static bool is_endpoint_present(struct sdw_slave *sdw_device, int dai_type)
{
int i;
@@ -1145,7 +1144,7 @@ static bool is_endpoint_present(struct sdw_slave *sdw_device,
}
for (i = 0; i < sdw_device->sdca_data.num_functions; i++) {
- if (dai_type == dai_info->dais[i].dai_type)
+ if (dai_type == asoc_sdw_get_dai_type(sdw_device->sdca_data.function[i].type))
return true;
}
dev_dbg(&sdw_device->dev, "Endpoint DAI type %d not found\n", dai_type);
@@ -1199,8 +1198,7 @@ static struct snd_soc_acpi_adr_device *find_acpi_adr_device(struct device *dev,
}
for (j = 0; j < codec_info_list[i].dai_num; j++) {
/* Check if the endpoint is present by the SDCA DisCo table */
- if (!is_endpoint_present(sdw_device, &codec_info_list[i],
- codec_info_list[i].dais[j].dai_type))
+ if (!is_endpoint_present(sdw_device, codec_info_list[i].dais[j].dai_type))
continue;
endpoints[ep_index].num = j;