[RFC 2/2] ASoC: rt5670: Add LED trigger support

Hans de Goede hdegoede at redhat.com
Mon Mar 1 22:26:40 CET 2021


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



More information about the Alsa-devel mailing list