On 9/5/23 05:31, Amadeusz Sławiński wrote: > HDA and HDMI devices are simple enough that in case of user not having > topology tailored to their device, they can use fallback topology. > > Signed-off-by: Amadeusz Sławiński <amadeuszx.slawinski@xxxxxxxxxxxxxxx> > --- > sound/soc/intel/avs/pcm.c | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/sound/soc/intel/avs/pcm.c b/sound/soc/intel/avs/pcm.c > index 1fbb2c2fadb5..8565a530706d 100644 > --- a/sound/soc/intel/avs/pcm.c > +++ b/sound/soc/intel/avs/pcm.c > @@ -796,6 +796,28 @@ static int avs_component_probe(struct snd_soc_component *component) > > ret = avs_load_topology(component, filename); > kfree(filename); > + if (ret == -ENOENT && !strncmp(mach->tplg_filename, "hda-", 4)) { > + unsigned int vendor_id; > + > + if (sscanf(mach->tplg_filename, "hda-%08x-tplg.bin", &vendor_id) != 1) > + return ret; > + > + if (((vendor_id >> 16) & 0xFFFF) == 0x8086) > + mach->tplg_filename = devm_kasprintf(adev->dev, GFP_KERNEL, > + "hda-8086-generic-tplg.bin"); it's very odd to test for 0x8086 in a driver that only supports Intel devices, isn't it? One of these two branches is always-true or there's a missing explanation on what this 0x8086 is used for? > + else > + mach->tplg_filename = devm_kasprintf(adev->dev, GFP_KERNEL, > + "hda-generic-tplg.bin"); > + > + filename = kasprintf(GFP_KERNEL, "%s/%s", component->driver->topology_name_prefix, > + mach->tplg_filename); > + if (!filename) > + return -ENOMEM; > + > + dev_info(card->dev, "trying to load fallback topology %s\n", mach->tplg_filename); > + ret = avs_load_topology(component, filename); > + kfree(filename); > + } > if (ret < 0) > return ret; >