On 11/17/21 9:10 AM, Hans de Goede wrote: > Commit 959ae8215a9e ("ASoC: Intel: soc-acpi-cht: shrink tables using > compatible IDs") simplified the match tables in soc-acpi-intel-cht-match.c > by merging identical entries using the new .comp_ids snd_soc_acpi_mach > field to point a single entry to multiple ACPI HIDs and clearing the > previously unique per entry .id field. > > But various machine drivers from sound/soc/intel/boards rely on mach->id > in one or more ways. For example all of the following machine-drivers > for entries combined during the shrinking: > sound/soc/intel/boards/bytcr_rt5640.c > sound/soc/intel/boards/cht_bsw_rt5645.c > sound/soc/intel/boards/bytcht_da7213.c > > Do: > adev = acpi_dev_get_first_match_dev(mach->id, NULL, -1); > > Which now no longer works and some of them also do: > > pkg_found = snd_soc_acpi_find_package_from_hid(mach->id, ... > > if (!strncmp(snd_soc_cards[i].codec_id, mach->id, 8)) { ... > > Which now also no longer works. All these calls need to be fixed before > we can shrink the tables, so revert this change for now. > > Fixes: 959ae8215a9e ("ASoC: Intel: soc-acpi-cht: shrink tables using compatible IDs") > Cc: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx> > Cc: Brent Lu <brent.lu@xxxxxxxxx> > Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> Thanks for the patch, it's embarrassing. I must have tested the wrong code or the wrong device... Could we alternatively keep these tables and just copy the information using something like this (compile-tested only) diff --git a/include/sound/soc-acpi.h b/include/sound/soc-acpi.h index 31f4c4f9aeea..ac0893df9c76 100644 --- a/include/sound/soc-acpi.h +++ b/include/sound/soc-acpi.h @@ -147,7 +147,7 @@ struct snd_soc_acpi_link_adr { */ /* Descriptor for SST ASoC machine driver */ struct snd_soc_acpi_mach { - const u8 id[ACPI_ID_LEN]; + u8 id[ACPI_ID_LEN]; const struct snd_soc_acpi_codecs *comp_ids; const u32 link_mask; const struct snd_soc_acpi_link_adr *links; diff --git a/sound/soc/soc-acpi.c b/sound/soc/soc-acpi.c index 2ae99b49d3f5..6b9dfa0608a3 100644 --- a/sound/soc/soc-acpi.c +++ b/sound/soc/soc-acpi.c @@ -20,8 +20,10 @@ static bool snd_soc_acpi_id_present(struct snd_soc_acpi_mach *machine) if (comp_ids) { for (i = 0; i < comp_ids->num_codecs; i++) { - if (acpi_dev_present(comp_ids->codecs[i], NULL, -1)) + if (acpi_dev_present(comp_ids->codecs[i], NULL, -1)) { + strncpy(machine->id, comp_ids->codecs[i], ACPI_ID_LEN); return true; + } } }