[alsa-devel] UCM extensions

Pierre-Louis Bossart pierre-louis.bossart at linux.intel.com
Tue Nov 5 21:27:31 CET 2019



On 11/5/19 2:19 PM, Jaroslav Kysela wrote:
> Dne 05. 11. 19 v 20:52 Pierre-Louis Bossart napsal(a):
>>
>>
>> On 11/5/19 1:36 PM, Jaroslav Kysela wrote:
>>> Hi all,
>>>
>>>       I make some internal ucm code cleanups in alsa-lib and added three
>>> major extensions to allow more complex configurations which we require
>>> for the SOF kernel driver.
>>
>> Great, thanks for working on this!
>>
>>>
>>>       The first thing is the added substitution for the value strings:
>>>
>>> https://github.com/alsa-project/alsa-lib/commit/f1e637b285e8e04e6761248a070f58f3a8fde6fc 
>>>
>>>
>>>
>>>       The second thing is the If block:
>>>
>>> https://github.com/alsa-project/alsa-lib/commit/985715ce8148dc7ef62c8e3d8ce5a0c2ac51f8df 
>>>
>>
>> is it possible for the Condition to check if the card contains the SOF
>> prefix?
>>
>> For Baytrail/Cherrytrail support, we have a ton of existing UCM files,
>> and the only thing needed is e.g.
>> - to change from hw:bytcrrt5640 to hw:sofbytcrt5640
> 
> It is easy with the proposed substitution, just use hw:${CardId} here. 
> It can for any values (like PCM device names etc.).

thanks for confirming, I thought it'd be fine indeed.

> 
>> - make the controls for the legacy driver conditional
>>
>> SectionVerb {
>>     EnableSequence [
>>
>>         if (card name does not contain SOF)
>>         <platforms/bytcr/PlatformEnableSeq.conf>
>>         endif
>>         <codecs/rt5640/EnableSeq.conf>
>>     ]
> 
> The If blocks cannot be used in sequences, but you can do basically this 
> with the proposed If extension:
> 
> SectionVerb {
>      If.1 {
>          Condition {
>              Type StringEqual
>              String1 "${CardName}"
>              String2 "bytcrt5640"
>          }
>          True {
>              EnableSequence [
>                  <platforms/bytcr/PlatformEnableSeq.conf>
>                  <codecs/rt5640/EnableSeq.conf>
>              ]
>          }
>          False {
>              EnableSequence [
>                  <codecs/rt5640/EnableSeq.conf>
>              ]
>          }
>      }
> }
> 
> The condition with "Type StringEqual" is not implemented yet, but it's 
> easy to add new conditions to my proposed code. If you see something 
> else to be compared, just let me know to add those conditions in the 
> first phase.
ok, that's great.

Maybe StringContains would help, so that we can use String2 "sof" in 
most cases.


> 
>> Most of the information that matters for those UCM files is the type of
>> peripherals and the matching mixer configuration for the codec driver,
>> and we should reuse this information between legacy and SOF.
> 
> Yes, I see the demand to make the description more universal and easy to 
> read.
> 
> Note that cdev is already initialized from the ValueDefaults {} section 
> PlaybackCTL/CaptureCTL values even in the old code, so the most of cdev 
> declarations are not necessary in the current UCM configs too. When the 
> use-case configuration is tied to the one card, I added the code to use 
> it implicitly, so cdev can be really omitted. With the proposed code, 
> the PlaybackCTL/CaptureCTL are always available for the one card configs:
> 
> https://github.com/alsa-project/alsa-lib/commit/c099329ce6ffdb26fc7a4a6ffb6fbb166a1e856b 

Yes, that's a good change, it'll make it easier to manage configurations.

-Pierre


More information about the Alsa-devel mailing list