]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: soc-acpi-intel-ptl-match: Make Chrome matches conditional
authorCharles Keepax <ckeepax@opensource.cirrus.com>
Wed, 20 May 2026 16:36:29 +0000 (17:36 +0100)
committerMark Brown <broonie@kernel.org>
Thu, 21 May 2026 18:18:00 +0000 (19:18 +0100)
For PTL onwards Cirrus are intending to rely on function
topologies, rather than using a match table for each system
type. Chrome systems tend to have custom magic in the topology
and thus need to load a specific file. This causes problems as
these system can have the same layout as generic laptops causing
the match to apply to other laptops. Add a DMI quirk that forces
these matches to only apply to specific devices.

Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Link: https://patch.msgid.link/20260520163631.3300102-2-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/common/soc-acpi-intel-ptl-match.c
sound/soc/intel/common/soc-acpi-intel-sdca-quirks.c
sound/soc/intel/common/soc-acpi-intel-sdca-quirks.h

index ad3af8834e431a0bf4f3609ccd64b493a5e45d00..c6bf70e393975fa7d7c1398621f88729d4481617 100644 (file)
@@ -632,6 +632,7 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_ptl_sdw_machines[] = {
                .link_mask = BIT(2) | BIT(3),
                .links = ptl_cs42l43_agg_l3_cs35l56_l2,
                .drv_name = "sof_sdw",
+               .machine_check = snd_soc_acpi_intel_no_function_topology,
                .sof_tplg_filename = "sof-ptl-cs42l43-agg-l3-cs35l56-l2.tplg",
        },
        {
index 3eaa058f846085f1019ba70068412d6ca2ba0bd6..7caabc501b1636190508c80e76bfe997f819a0d5 100644 (file)
@@ -6,6 +6,7 @@
  *
  */
 
+#include <linux/dmi.h>
 #include <linux/soundwire/sdw_intel.h>
 #include <sound/sdca.h>
 #include <sound/soc-acpi.h>
@@ -37,6 +38,21 @@ bool snd_soc_acpi_intel_sdca_is_device_rt712_vb(void *arg)
 }
 EXPORT_SYMBOL_NS(snd_soc_acpi_intel_sdca_is_device_rt712_vb, "SND_SOC_ACPI_INTEL_SDCA_QUIRKS");
 
+static const struct dmi_system_id function_topology_quirk_table[] = {
+       {
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Google"),
+               },
+       },
+       {}
+};
+
+bool snd_soc_acpi_intel_no_function_topology(void *arg)
+{
+       return !!dmi_check_system(function_topology_quirk_table);
+}
+EXPORT_SYMBOL_NS(snd_soc_acpi_intel_no_function_topology, "SND_SOC_ACPI_INTEL_SDCA_QUIRKS");
+
 MODULE_DESCRIPTION("ASoC ACPI Intel SDCA quirks");
 MODULE_LICENSE("GPL");
 MODULE_IMPORT_NS("SND_SOC_SDCA");
index bead5ec6243f9b8c10daee70dda82866695437a3..2ea0a1881c4bda5bb68d0d10468b29c5a6bd75a5 100644 (file)
@@ -10,5 +10,6 @@
 #define _SND_SOC_ACPI_INTEL_SDCA_QUIRKS
 
 bool snd_soc_acpi_intel_sdca_is_device_rt712_vb(void *arg);
+bool snd_soc_acpi_intel_no_function_topology(void *arg);
 
 #endif