ASoC: soc_sdw_utils: partial match the codec name

Currently, we can set codec name in the dai info which will be set as
the codec component name in a DAI link. However, the codec name may
not be fixed. For example, there is an index in a SDCA codec name and
that is not fixed. Lookup the fixed codec name string from the component
list to get the right component name to ensure the DAI link will bind
to the right codec component.

Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
Link: https://patch.msgid.link/20260225135004.2322987-3-yung-chuan.liao@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Bard Liao 2026-02-25 21:50:03 +08:00 committed by Mark Brown
parent 98eb42c7de
commit c5ae3d8bc9
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0

View File

@ -1215,8 +1215,18 @@ const char *asoc_sdw_get_codec_name(struct device *dev,
const struct snd_soc_acpi_link_adr *adr_link,
int adr_index)
{
if (dai_info->codec_name)
return devm_kstrdup(dev, dai_info->codec_name, GFP_KERNEL);
if (dai_info->codec_name) {
struct snd_soc_component *component;
component = snd_soc_lookup_component_by_name(dai_info->codec_name);
if (component) {
dev_dbg(dev, "%s found component %s for codec_name %s\n",
__func__, component->name, dai_info->codec_name);
return devm_kstrdup(dev, component->name, GFP_KERNEL);
} else {
return devm_kstrdup(dev, dai_info->codec_name, GFP_KERNEL);
}
}
return _asoc_sdw_get_codec_name(dev, adr_link, adr_index);
}
@ -1528,7 +1538,17 @@ int asoc_sdw_parse_sdw_endpoints(struct snd_soc_card *card,
return -EINVAL;
for (j = 0; j < codec_info->aux_num; j++) {
soc_aux->dlc.name = codec_info->auxs[j].codec_name;
struct snd_soc_component *component;
component = snd_soc_lookup_component_by_name(codec_info->auxs[j].codec_name);
if (component) {
dev_dbg(dev, "%s found component %s for aux name %s\n",
__func__, component->name,
codec_info->auxs[j].codec_name);
soc_aux->dlc.name = component->name;
} else {
soc_aux->dlc.name = codec_info->auxs[j].codec_name;
}
soc_aux++;
}