Hi, On 3/1/21 9:43 PM, Mark Brown wrote: > On Mon, Mar 01, 2021 at 08:49:34PM +0100, Hans de Goede wrote: >> On 3/1/21 8:15 PM, Mark Brown wrote: > >>> Off the top of my head something like writing a control name into a >>> sysfs file might work, it doesn't scale if you need to use multiple >>> controls as rt5640 does though. > >> Currently ALSA/UCM does not use sysfs files for anything, so this >> feels very inconsistent with how all the rest of this currently works. > > Yes, you'd really want to add string controls in ALSA. Hmm, we already have SNDRV_CTL_ELEM_TYPE_BYTES controls. I think that will work nicely actually, we can have the UCM conf file send a 0 terminated string to the driver that way. It would be nice to have some syntactic sugar on the UCM side to be able to actually specify a string instead of an array of bytes, but I don't think we need any new userspace API for this. This can be combined with a SND_SOC_... macro + helper to add an entry to the usual snd_kcontrol_new <codec-name>_snd_controls[] table for this, which when the control gets set/put will walk over all the controls and find one with a matching name and then add the access flag which Jaroslav's code uses to control the led-trigger to the matching control. I think that that should work nicely for the use-cases which I have ATM and should be flexible enough for future cases. The same control can even be written multiple times to set the flag on multiple controls and we could have a write of an empty string clear the flag on all controls. So in UCM (with the syntactic sugar) for the rt5640 we could then e.g. use something like this: # Clear Speaker Mute LED flags from all controls, then set it # on the Speaker and HP Channel Switches cset "name='Speaker Mute LED Control' ''" cset "name='Speaker Mute LED Control' 'Speaker Channel Switch'" cset "name='Speaker Mute LED Control' 'HP Channel Switch'" Mark, does this sound like an acceptable solution to you ? I know you will want to see the actual code before you can give me a definitive yes on this, but I would like to know that this at least looks like it would be acceptable to you before spending time on coding this out and testing it. Regards, Hans