On 2018年11月01日 09:07, Pierre-Louis Bossart wrote:
For some reason the RVP/LeafHill SSDT exposes an INT34C3 ID which is used on other boards to point to the TDF8532 amplifier. Yay BIOS.
Add a DMI-quirk to ignore this ID and check for other valid machine driver descriptors.
Signed-off-by: Pierre-Louis Bossart pierre-louis.bossart@linux.intel.com
.../intel/common/soc-acpi-intel-bxt-match.c | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+)
diff --git a/sound/soc/intel/common/soc-acpi-intel-bxt-match.c b/sound/soc/intel/common/soc-acpi-intel-bxt-match.c index 2756fa4ab552..752a1bbff7f7 100644 --- a/sound/soc/intel/common/soc-acpi-intel-bxt-match.c +++ b/sound/soc/intel/common/soc-acpi-intel-bxt-match.c @@ -6,9 +6,43 @@
*/
+#include <linux/dmi.h> #include <sound/soc-acpi.h> #include <sound/soc-acpi-intel-match.h>
+static unsigned long apl_machine_id;
+#define APL_RVP 1
+static int apl_rvp_quirk_cb(const struct dmi_system_id *id) +{
- apl_machine_id = APL_RVP;
- return 1;
+}
+static const struct dmi_system_id apl_table[] = {
- {
.callback = apl_rvp_quirk_cb,
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Intel Corp."),
DMI_MATCH(DMI_BOARD_NAME, "Apollolake RVP1A"),
},
- },
- {},
+};
+static struct snd_soc_acpi_mach *apl_quirk(void *arg) +{
- struct snd_soc_acpi_mach *mach = arg;
- dmi_check_system(apl_table);
- if (apl_machine_id == APL_RVP)
return NULL;
- else
return mach;
+}
- static struct snd_soc_acpi_codecs bxt_codecs = { .num_codecs = 1, .codecs = {"MX98357A"}
@@ -50,6 +84,7 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_bxt_machines[] = { { .id = "INT34C3", .drv_name = "bxt_tdf8532",
.sof_fw_filename = "intel/sof-apl.ri", .sof_tplg_filename = "intel/sof-apl-tdf8532.tplg", .asoc_plat_name = "0000:00:0e.0",.machine_quirk = apl_quirk,
I believe this can work, but when I went through snd_soc_acpi_find_machine(), I find a possible bug there, it won't continue matching search when the machine_quirk() return NULL.
Let me send a fix for that.
Thanks, ~Keyon