ASoC: Intel: sof_sdw: Add lookup of quirk using PCI subsystem ID
Add lookup of PCI subsystem vendor:device ID to find a quirk. The subsystem ID (SSID) is part of the PCI specification to uniquely identify a particular system-specific implementation of a hardware device. Unlike DMI information, it identifies the sound hardware itself, rather than a specific model of PC. SSID can be more reliable and stable than DMI strings, and is preferred by some vendors as the way to identify the actual sound hardware. Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com> Reviewed-by: Liam Girdwood <liam.r.girdwood@intel.com> Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Link: https://patch.msgid.link/20250204053943.93596-2-yung-chuan.liao@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
a8c9a45338
commit
fc016ef7da
1 changed files with 24 additions and 6 deletions
|
@ -13,6 +13,7 @@
|
|||
#include <linux/soundwire/sdw.h>
|
||||
#include <linux/soundwire/sdw_type.h>
|
||||
#include <linux/soundwire/sdw_intel.h>
|
||||
#include <sound/core.h>
|
||||
#include <sound/soc-acpi.h>
|
||||
#include "sof_sdw_common.h"
|
||||
#include "../../codecs/rt711.h"
|
||||
|
@ -751,6 +752,22 @@ static const struct dmi_system_id sof_sdw_quirk_table[] = {
|
|||
{}
|
||||
};
|
||||
|
||||
static const struct snd_pci_quirk sof_sdw_ssid_quirk_table[] = {
|
||||
{}
|
||||
};
|
||||
|
||||
static void sof_sdw_check_ssid_quirk(const struct snd_soc_acpi_mach *mach)
|
||||
{
|
||||
const struct snd_pci_quirk *quirk_entry;
|
||||
|
||||
quirk_entry = snd_pci_quirk_lookup_id(mach->mach_params.subsystem_vendor,
|
||||
mach->mach_params.subsystem_device,
|
||||
sof_sdw_ssid_quirk_table);
|
||||
|
||||
if (quirk_entry)
|
||||
sof_sdw_quirk = quirk_entry->value;
|
||||
}
|
||||
|
||||
static struct snd_soc_dai_link_component platform_component[] = {
|
||||
{
|
||||
/* name might be overridden during probe */
|
||||
|
@ -1278,6 +1295,13 @@ static int mc_probe(struct platform_device *pdev)
|
|||
|
||||
snd_soc_card_set_drvdata(card, ctx);
|
||||
|
||||
if (mach->mach_params.subsystem_id_set) {
|
||||
snd_soc_card_set_pci_ssid(card,
|
||||
mach->mach_params.subsystem_vendor,
|
||||
mach->mach_params.subsystem_device);
|
||||
sof_sdw_check_ssid_quirk(mach);
|
||||
}
|
||||
|
||||
dmi_check_system(sof_sdw_quirk_table);
|
||||
|
||||
if (quirk_override != -1) {
|
||||
|
@ -1293,12 +1317,6 @@ static int mc_probe(struct platform_device *pdev)
|
|||
for (i = 0; i < ctx->codec_info_list_count; i++)
|
||||
codec_info_list[i].amp_num = 0;
|
||||
|
||||
if (mach->mach_params.subsystem_id_set) {
|
||||
snd_soc_card_set_pci_ssid(card,
|
||||
mach->mach_params.subsystem_vendor,
|
||||
mach->mach_params.subsystem_device);
|
||||
}
|
||||
|
||||
ret = sof_card_dai_links_create(card);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
|
Loading…
Add table
Reference in a new issue