From: Niranjan H Y <niranjan.hy@ti.com>
To: <linux-sound@vger.kernel.org>
Cc: <linux-kernel@vger.kernel.org>, <broonie@kernel.org>,
<lgirdwood@gmail.com>, <perex@perex.cz>, <tiwai@suse.com>,
<cezary.rojewski@intel.com>, <peter.ujfalusi@linux.intel.com>,
<yung-chuan.liao@linux.intel.com>,
<ranjani.sridharan@linux.intel.com>,
<kai.vehmanen@linux.intel.com>, <pierre-louis.bossart@linux.dev>,
<baojun.xu@ti.com>, <shenghao-ding@ti.com>, <sandeepk@ti.com>,
<v-hampiholi@ti.com>, Niranjan H Y <niranjan.hy@ti.com>
Subject: [PATCH v1 1/4] ASoC: sdw_utils: add vendor_id to asoc_sdw_codec_info
Date: Mon, 23 Mar 2026 09:45:05 +0530 [thread overview]
Message-ID: <20260323041505.2088-1-niranjan.hy@ti.com> (raw)
struct asoc_sdw_codec_info has part_id which is not
sufficient to uniquely identify devices. This change
adds the vendor_id field and updates the codec_info
list with the corresponding vendor id as per the
Manufacturer's id in https://mid.mipi.org/
Signed-off-by: Niranjan H Y <niranjan.hy@ti.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
---
include/sound/soc_sdw_utils.h | 1 +
sound/soc/sdw_utils/soc_sdw_utils.c | 46 +++++++++++++++++++++++++----
sound/soc/sof/intel/hda.c | 7 +++--
3 files changed, 47 insertions(+), 7 deletions(-)
diff --git a/include/sound/soc_sdw_utils.h b/include/sound/soc_sdw_utils.h
index 98531e500cbb..48f516ba682f 100644
--- a/include/sound/soc_sdw_utils.h
+++ b/include/sound/soc_sdw_utils.h
@@ -71,6 +71,7 @@ struct asoc_sdw_aux_info {
};
struct asoc_sdw_codec_info {
+ const int vendor_id;
const int part_id;
const int version_id;
const char *name_prefix;
diff --git a/sound/soc/sdw_utils/soc_sdw_utils.c b/sound/soc/sdw_utils/soc_sdw_utils.c
index 75658148df57..0daffd78f58c 100644
--- a/sound/soc/sdw_utils/soc_sdw_utils.c
+++ b/sound/soc/sdw_utils/soc_sdw_utils.c
@@ -73,6 +73,7 @@ static const struct snd_kcontrol_new rt700_controls[] = {
struct asoc_sdw_codec_info codec_info_list[] = {
{
+ .vendor_id = 0x0102,
.part_id = 0x0000, /* TAS2783A */
.name_prefix = "tas2783",
.dais = {
@@ -92,6 +93,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 1,
},
{
+ .vendor_id = 0x025d,
.part_id = 0x700,
.name_prefix = "rt700",
.dais = {
@@ -110,6 +112,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 1,
},
{
+ .vendor_id = 0x025d,
.part_id = 0x711,
.name_prefix = "rt711",
.version_id = 3,
@@ -131,6 +134,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 1,
},
{
+ .vendor_id = 0x025d,
.part_id = 0x711,
.name_prefix = "rt711",
.version_id = 2,
@@ -152,6 +156,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 1,
},
{
+ .vendor_id = 0x025d,
.part_id = 0x712,
.name_prefix = "rt712",
.version_id = 3,
@@ -194,6 +199,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 3,
},
{
+ .vendor_id = 0x025d,
.part_id = 0x1712,
.name_prefix = "rt712-dmic",
.version_id = 3,
@@ -209,6 +215,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 1,
},
{
+ .vendor_id = 0x025d,
.part_id = 0x713,
.name_prefix = "rt713",
.version_id = 3,
@@ -237,6 +244,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 2,
},
{
+ .vendor_id = 0x025d,
.part_id = 0x1713,
.name_prefix = "rt713-dmic",
.version_id = 3,
@@ -252,6 +260,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 1,
},
{
+ .vendor_id = 0x025d,
.part_id = 0x1308,
.name_prefix = "rt1308",
.acpi_id = "10EC1308",
@@ -275,6 +284,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.ops = &soc_sdw_rt1308_i2s_ops,
},
{
+ .vendor_id = 0x025d,
.part_id = 0x1316,
.name_prefix = "rt1316",
.dais = {
@@ -296,6 +306,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 1,
},
{
+ .vendor_id = 0x025d,
.part_id = 0x1318,
.name_prefix = "rt1318",
.dais = {
@@ -317,6 +328,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 1,
},
{
+ .vendor_id = 0x025d,
.part_id = 0x1320,
.name_prefix = "rt1320",
.dais = {
@@ -338,6 +350,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 1,
},
{
+ .vendor_id = 0x025d,
.part_id = 0x1321,
.name_prefix = "rt1320",
.dais = {
@@ -359,6 +372,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 1,
},
{
+ .vendor_id = 0x025d,
.part_id = 0x714,
.name_prefix = "rt714",
.version_id = 3,
@@ -375,6 +389,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 1,
},
{
+ .vendor_id = 0x025d,
.part_id = 0x715,
.name_prefix = "rt715",
.version_id = 3,
@@ -391,6 +406,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 1,
},
{
+ .vendor_id = 0x025d,
.part_id = 0x714,
.name_prefix = "rt714",
.version_id = 2,
@@ -407,6 +423,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 1,
},
{
+ .vendor_id = 0x025d,
.part_id = 0x715,
.name_prefix = "rt715",
.version_id = 2,
@@ -423,6 +440,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 1,
},
{
+ .vendor_id = 0x025d,
.part_id = 0x721,
.name_prefix = "rt721",
.version_id = 3,
@@ -466,6 +484,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 3,
},
{
+ .vendor_id = 0x025d,
.part_id = 0x722,
.name_prefix = "rt722",
.version_id = 3,
@@ -513,6 +532,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 3,
},
{
+ .vendor_id = 0x019f,
.part_id = 0x8373,
.name_prefix = "Left",
.dais = {
@@ -533,6 +553,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 1,
},
{
+ .vendor_id = 0x019f,
.part_id = 0x8363,
.name_prefix = "Left",
.dais = {
@@ -553,6 +574,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 1,
},
{
+ .vendor_id = 0x025d,
.part_id = 0x5682,
.name_prefix = "rt5682",
.dais = {
@@ -571,6 +593,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 1,
},
{
+ .vendor_id = 0x01fa,
.part_id = 0x3556,
.name_prefix = "AMP",
.dais = {
@@ -598,6 +621,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 2,
},
{
+ .vendor_id = 0x01fa,
.part_id = 0x3557,
.name_prefix = "AMP",
.dais = {
@@ -625,6 +649,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 2,
},
{
+ .vendor_id = 0x01fa,
.part_id = 0x3563,
.name_prefix = "AMP",
.dais = {
@@ -652,6 +677,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 2,
},
{
+ .vendor_id = 0x01fa,
.part_id = 0x4242,
.name_prefix = "cs42l42",
.dais = {
@@ -670,6 +696,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 1,
},
{
+ .vendor_id = 0x01fa,
.part_id = 0x4243,
.name_prefix = "cs42l43",
.count_sidecar = asoc_sdw_bridge_cs35l56_count_sidecar,
@@ -778,6 +805,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 4,
},
{
+ .vendor_id = 0x01fa,
.part_id = 0x4245,
.name_prefix = "cs42l45",
.dais = {
@@ -850,6 +878,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.aux_num = 1,
},
{
+ .vendor_id = 0x01fa,
.part_id = 0x4747,
.name_prefix = "cs47l47",
.dais = {
@@ -886,6 +915,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.aux_num = 1,
},
{
+ .vendor_id = 0x0105,
.part_id = 0xaaaa, /* generic codec mockup */
.name_prefix = "sdw_mockup_mmulti-function",
.version_id = 0,
@@ -912,6 +942,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 3,
},
{
+ .vendor_id = 0x0105,
.part_id = 0xaa55, /* headset codec mockup */
.name_prefix = "sdw_mockup_headset0",
.version_id = 0,
@@ -926,6 +957,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 1,
},
{
+ .vendor_id = 0x0105,
.part_id = 0x55aa, /* amplifier mockup */
.name_prefix = "sdw_mockup_amp1",
.version_id = 0,
@@ -940,6 +972,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
.dai_num = 1,
},
{
+ .vendor_id = 0x0105,
.part_id = 0x5555,
.name_prefix = "sdw_mockup_mic0",
.version_id = 0,
@@ -964,9 +997,10 @@ EXPORT_SYMBOL_NS(asoc_sdw_get_codec_info_list_count, "SND_SOC_SDW_UTILS");
struct asoc_sdw_codec_info *asoc_sdw_find_codec_info_part(const u64 adr)
{
- unsigned int part_id, sdw_version;
+ unsigned int vendor_id, part_id, sdw_version;
int i;
+ vendor_id = SDW_MFG_ID(adr);
part_id = SDW_PART_ID(adr);
sdw_version = SDW_VERSION(adr);
for (i = 0; i < ARRAY_SIZE(codec_info_list); i++)
@@ -975,6 +1009,7 @@ struct asoc_sdw_codec_info *asoc_sdw_find_codec_info_part(const u64 adr)
* version_id is not specified in the codec info.
*/
if (part_id == codec_info_list[i].part_id &&
+ vendor_id == codec_info_list[i].vendor_id &&
(!codec_info_list[i].version_id ||
sdw_version == codec_info_list[i].version_id))
return &codec_info_list[i];
@@ -989,6 +1024,7 @@ static struct asoc_sdw_codec_info *asoc_sdw_find_codec_info_sdw_id(const struct
for (i = 0; i < ARRAY_SIZE(codec_info_list); i++)
if (id->part_id == codec_info_list[i].part_id &&
+ id->mfg_id == codec_info_list[i].vendor_id &&
(!codec_info_list[i].version_id ||
id->sdw_version == codec_info_list[i].version_id))
return &codec_info_list[i];
@@ -1093,8 +1129,8 @@ int asoc_sdw_rtd_init(struct snd_soc_pcm_runtime *rtd)
ret = snd_soc_add_card_controls(card, codec_info->dais[dai_index].controls,
codec_info->dais[dai_index].num_controls);
if (ret) {
- dev_err(card->dev, "%#x controls addition failed: %d\n",
- codec_info->part_id, ret);
+ dev_err(card->dev, "%#x-%#x controls addition failed: %d\n",
+ codec_info->vendor_id, codec_info->part_id, ret);
return ret;
}
}
@@ -1103,8 +1139,8 @@ int asoc_sdw_rtd_init(struct snd_soc_pcm_runtime *rtd)
codec_info->dais[dai_index].widgets,
codec_info->dais[dai_index].num_widgets);
if (ret) {
- dev_err(card->dev, "%#x widgets addition failed: %d\n",
- codec_info->part_id, ret);
+ dev_err(card->dev, "%#x-%#x widgets addition failed: %d\n",
+ codec_info->vendor_id, codec_info->part_id, ret);
return ret;
}
}
diff --git a/sound/soc/sof/intel/hda.c b/sound/soc/sof/intel/hda.c
index c0cc7d3ce526..9ec33147d9af 100644
--- a/sound/soc/sof/intel/hda.c
+++ b/sound/soc/sof/intel/hda.c
@@ -1179,6 +1179,9 @@ static struct snd_soc_acpi_adr_device *find_acpi_adr_device(struct device *dev,
struct snd_soc_acpi_endpoint *endpoints;
int amp_group_id = 1;
+ if (sdw_device->id.mfg_id != codec_info_list[i].vendor_id)
+ continue;
+
if (sdw_device->id.part_id != codec_info_list[i].part_id)
continue;
@@ -1193,8 +1196,8 @@ static struct snd_soc_acpi_adr_device *find_acpi_adr_device(struct device *dev,
* dereference
*/
if (!name_prefix) {
- dev_err(dev, "codec_info_list name_prefix of part id %#x is missing\n",
- codec_info_list[i].part_id);
+ dev_err(dev, "codec_info_list name_prefix of part id %#x-%#x is missing\n",
+ codec_info_list[i].vendor_id, codec_info_list[i].part_id);
return NULL;
}
for (j = 0; j < codec_info_list[i].dai_num; j++) {
--
2.34.1
next reply other threads:[~2026-03-23 4:15 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-23 4:15 Niranjan H Y [this message]
2026-03-23 21:43 ` [PATCH v1 1/4] ASoC: sdw_utils: add vendor_id to asoc_sdw_codec_info Pierre-Louis Bossart
2026-03-23 22:15 ` Mark Brown
2026-03-24 3:36 ` Holalu Yogendra, Niranjan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260323041505.2088-1-niranjan.hy@ti.com \
--to=niranjan.hy@ti.com \
--cc=baojun.xu@ti.com \
--cc=broonie@kernel.org \
--cc=cezary.rojewski@intel.com \
--cc=kai.vehmanen@linux.intel.com \
--cc=lgirdwood@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=perex@perex.cz \
--cc=peter.ujfalusi@linux.intel.com \
--cc=pierre-louis.bossart@linux.dev \
--cc=ranjani.sridharan@linux.intel.com \
--cc=sandeepk@ti.com \
--cc=shenghao-ding@ti.com \
--cc=tiwai@suse.com \
--cc=v-hampiholi@ti.com \
--cc=yung-chuan.liao@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox