On 4/29/23 05:47, Hans de Goede wrote:
The Nextbook Ares 8A tablet which has Android as factory OS, has a buggy DSDT with both ESSX8316 and 10EC5651 ACPI devices.
This tablet actually uses an rt5651 codec, but the matching code ends up picking the ESSX8316 device, add a quirk to ignote the ESSX8316 device on this tablet.
Signed-off-by: Hans de Goede hdegoede@redhat.com
It took me a while to understand the logic: the ES8316 device is ignored so the matching code keeps going until it finds the rt5651 later in the table
Acked-by: Pierre-Louis Bossart pierre-louis.bossart@linux.intel.com
.../intel/common/soc-acpi-intel-cht-match.c | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+)
diff --git a/sound/soc/intel/common/soc-acpi-intel-cht-match.c b/sound/soc/intel/common/soc-acpi-intel-cht-match.c index 6beb00858c33..cdcbf04b8832 100644 --- a/sound/soc/intel/common/soc-acpi-intel-cht-match.c +++ b/sound/soc/intel/common/soc-acpi-intel-cht-match.c @@ -50,6 +50,31 @@ static struct snd_soc_acpi_mach *cht_quirk(void *arg) return mach; }
+/*
- Some tablets with Android factory OS have buggy DSDTs with an ESSX8316 device
- in the ACPI tables. While they are not using an ESS8316 codec. These DSDTs
- also have an ACPI device for the correct codec, ignore the ESSX8316.
- */
+static const struct dmi_system_id cht_ess8316_not_present_table[] = {
- {
/* Nextbook Ares 8A */
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
DMI_MATCH(DMI_PRODUCT_NAME, "CherryTrail"),
DMI_MATCH(DMI_BIOS_VERSION, "M882"),
},
- },
- { }
+};
+static struct snd_soc_acpi_mach *cht_ess8316_quirk(void *arg) +{
- if (dmi_check_system(cht_ess8316_not_present_table))
return NULL;
- return arg;
+}
static const struct snd_soc_acpi_codecs rt5640_comp_ids = { .num_codecs = 2, .codecs = { "10EC5640", "10EC3276" }, @@ -113,6 +138,7 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_cherrytrail_machines[] = { .drv_name = "bytcht_es8316", .fw_filename = "intel/fw_sst_22a8.bin", .board = "bytcht_es8316",
.sof_tplg_filename = "sof-cht-es8316.tplg", }, /* some CHT-T platforms rely on RT5640, use Baytrail machine driver */.machine_quirk = cht_ess8316_quirk,