Message ID | 20230905093147.1960675-1-amadeuszx.slawinski@linux.intel.com |
---|---|
State | Accepted |
Commit | 739c031110da9ba966b0189fa25a2a1c0d42263c |
Headers | show |
Series | ASoC: Intel: avs: Provide support for fallback topology | expand |
On 9/5/2023 2:42 PM, Pierre-Louis Bossart wrote: > > > 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@linux.intel.com> >> --- >> 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? > Differentiating between generic codecs (https://github.com/thesofproject/avs-topology-xml/tree/main/hda) and hdmi ones (https://github.com/thesofproject/avs-topology-xml/tree/main/hdmi), as topology targets codec.
On 9/5/23 09:58, Amadeusz Sławiński wrote: > On 9/5/2023 2:42 PM, Pierre-Louis Bossart wrote: >> >> >> 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@linux.intel.com> >>> --- >>> 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? >> > > Differentiating between generic codecs > (https://github.com/thesofproject/avs-topology-xml/tree/main/hda) and > hdmi ones > (https://github.com/thesofproject/avs-topology-xml/tree/main/hdmi), as > topology targets codec. Ah yes, 0x8086 for the codec vendor. I must admit I didn't click after a 4-day week-end... BTW your list of topologies helps with my assertion that we are missing a 'hardware layer' in the topology framework, it makes no sense to have a proliferation of topology files that all look the same. We really need the ability to tell which endpoints are active or not, and which hardware interface to use on a given platform. copy-pasting and using macros is going to lead us into a maintenance nightmare.
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"); + 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;
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@linux.intel.com> --- sound/soc/intel/avs/pcm.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)