Message ID | 20230429104721.7176-1-hdegoede@redhat.com |
---|---|
State | Accepted |
Commit | ec6f82b4c63cc68f8dc03316e725106d242706be |
Headers | show |
Series | ASoC: Intel: soc-acpi-cht: Add quirk for Nextbook Ares 8A tablet | expand |
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", > + .machine_quirk = cht_ess8316_quirk, > .sof_tplg_filename = "sof-cht-es8316.tplg", > }, > /* some CHT-T platforms rely on RT5640, use Baytrail machine driver */
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", + .machine_quirk = cht_ess8316_quirk, .sof_tplg_filename = "sof-cht-es8316.tplg", }, /* some CHT-T platforms rely on RT5640, use Baytrail machine driver */
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> --- .../intel/common/soc-acpi-intel-cht-match.c | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+)