Re: [alsa-devel] [Question][ASoC][Topology] Question about ASoC Topology
Hi Takashi,
Thanks for your explanation on how topology works! I cc the ML since potential users may also benefit from this info.
Hi Lee,
Now Intel SKL (Skylake) audio driver is using topology, which might be a reference for you.
For the text conf file in user space, please see alsa-lib/src/conf/topology/sklrt286/skl_i2s.conf. The topology user space tool alsatplg will generate the SKL topology binary file for kernel. The doxygen doc also introduces the syntax.
Besides the text conf file, you may also define topology objects by C API, declared in alsa-lib/include/topology.h
For how the SKL platform driver loads the toplogy binary file, please see the kernel src code: sound/soc/intel/skylake/skl-topology.c, where snd_soc_tplg_component_load() is called to load the topology info and trigger ops binding in kernel.
Now the upstreamed topology code support: controls, widgets, routes and PCM (Front-ends DAI & DAI links).
And now we're upstreaming support for Back-end DAIs and BE links. This may be bring some ABI update and last for several weeks. You may try using topology atm, but you'll need to rebuild your topology binary info after the ABI update. I'll keep you updated when it's done.
If you have any further questions, please let us know.
Thanks Mengdong
On 07/18/2016 03:19 PM, Takashi Sakamoto wrote:
Hi,
(C.C.ed to Intel developers, who committed to ALSA topology feature.)
On Jul 18 2016 14:07, 이경택 wrote:
At first, sorry about interrupting you and thank you for giving your attention to an email from stranger.
No worry.
I'm a software engineer in Samsung and writing a device driver for our audio.
In recent kernel source code(version 4.4), I found out there is a new feature called topology.
I thought that it is a framework for seperating data and logic of audio drivers,
so I wanted to write my driver on that framework.
But, it is hard to find out a starting point. (example, documentation, ......)
If you give me an starting point, it would be very helpful to me.
The feature of 'topology' was originally developed by Intel developers. So I think it better to ask your questions to them.
As long as I know, the original goal of this feature is to write parsable blobs for new HDA driver to PCH in Skylake architecture (Skylake, Kabylake, etc).
The new HDA driver (snd-soc-skl) doesn't directly enumerate widgets in HDA codecs at all. Instead, the parsable blob represents the codec internal. As a result of parsing the blob, some control elements, some DAI links and so on are added. When you're interested in the functions to add them, please start at soc_tplg_load_header(). http://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/tree/sound/soc/s...
In kernel driver side, the blobs are loaded by usual way; request_firmware(). https://www.kernel.org/doc/Documentation/firmware_class/README
Then, each kernel drivers parse the image by snd_soc_tplg_component_load(). http://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/tree/sound/soc/s...
Of cource, you need to put the blobs to typical file path; /lib/firmware.
When writing files to generate the blob, you need to check two items; one is UAPI of ASoC (include/uapi/sound/asoc.h) and another is runtime configuration of ALSA userspace library.
What you can do via topology feature is defined in the UAPI header. The way to describe them to files is the same way as runtime configuration of ALSA userspace library. http://www.alsa-project.org/alsa-doc/alsa-lib/conf.html
When you write the files, you can generate the blobs by 'alsatplg' utils in alsa-utils.git. I believe it can detect parse errors. http://git.alsa-project.org/?p=alsa-utils.git;a=tree;f=topology
That's all of what I know. I hope this will help you or you can get enough support about the new feature from Intel developers.
p.s. I'm committing to ALSA in my private time, so I sometimes need to stop discussions because of my limited time. I'm not a developer belongs to semi-conductors or hardware vendors and have paid work for my life.
Regards
Takashi Sakamoto
participants (1)
-
Mengdong Lin