alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
From: Jaroslav Kysela <perex@perex.cz>
To: Hans de Goede <hdegoede@redhat.com>, Mark Brown <broonie@kernel.org>
Cc: Takashi Iwai <tiwai@suse.de>, alsa-devel@alsa-project.org
Subject: Re: [RFC 2/2] ASoC: rt5670: Add LED trigger support
Date: Fri, 5 Mar 2021 14:02:44 +0100	[thread overview]
Message-ID: <28fffebd-1ce9-7480-0f2f-ed8369abddf1@perex.cz> (raw)
In-Reply-To: <7c6c2f44-e6a1-48e7-773e-033ba4582742@redhat.com>

Dne 04. 03. 21 v 20:39 Hans de Goede napsal(a):
> Hi,
> 
> On 3/2/21 10:14 PM, Jaroslav Kysela wrote:
>> Dne 01. 03. 21 v 22:26 Hans de Goede napsal(a):
>>> 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.
>>
>> The LEDs are controlled per machine not per card. So do we need to create the 'Speaker/Mic LED Control' control for all cards?
>>
>> Also, this change sounds really generic. The interface may be implemented in my proposed control led kernel module, not in the codec drivers.
>>
>> The Mark's sysfs idea is not bad in my opinion. The sequences may be extended in UCM, we have already 'exec' command. Yes, this command is a little heavy for the sysfs writes, but we can add command like 'sysset' or so for sysfs like:
> 
> Okay, so this would be a sysfs file per card then? Sol we would have for example
> 2 new sysfs files like this show up when your module is loaded:
> 
> /sys/class/sounds/card0/spk_mute_led_control
> /sys/class/sounds/card0/mic_mute_led_control
> 
> And reading would iterate over all mixer-elements of the card and print
> the names of those which have the relevant access LED flag set, where
> as a write would be taken as a control-name to add the access LED flag
> too?

It depends if we want to have this feature as an independent add-on
(implemented in the generic sound LED module) or if we tie this more to
the ALSA's core control code.

My proposal creates virtual sound ctl-led driver - thus
/sysfs/devices/virtual/sound/ctl-led/ tree. We can add a subdirectory per card
there like:

/sysfs/devices/virtual/sound/ctl-led/speaker/card0/attach

...

> And an empty write would be special and clear the flag on all controls?
> I guess we don't strictly need that if we only set things up at boot once,
> but it might still be handy to force things to a clean state.

The list operations should be probably identified by separate sysfs files.

/sysfs/devices/virtual/sound/ctl-led/speaker/card0/attach
/sysfs/devices/virtual/sound/ctl-led/speaker/card0/detach
/sysfs/devices/virtual/sound/ctl-led/speaker/card0/reset
/sysfs/devices/virtual/sound/ctl-led/speaker/card0/controls

And /sys/class/sounds/card0/controlC0/led-speaker may be a symlink to
/sysfs/devices/virtual/sound/ctl-led/speaker/card0/ .

>>   # detach all speaker LED controls for card 1
>>   # similar to 'echo -n "card=1,*" > /sysfs/devices/virtual/sound/ctl-led/speaker/detach'
>>   sysset "devices/virtual/sound/ctl-led/speaker/detach:card=1,*"
>>
>>   # attach the 'Speaker Playback Switch',10 control to speaker LED trigger in card 1
>>   # similar to 'echo -n "card=1,iface=MIXER,name='Speaker Playback Switch',index=10" > /sysfs/devices/virtual/sound/ctl-led/speaker/attach
>>   sysset "devices/virtual/sound/ctl-led/speaker/attach:card=1,iface=MIXER,name='Speaker Playback Switch',index=10"
> 
> I think a sysfs file per card would work better, that would certainly be
> a lot more inline with how sysfs is normally used...
> 
> Also do we need the iface=MIXER part ?

It was just a complete example (element ID specification in a string from
alsa-lib/amixer). Of course, the other element types won't be probably used
for the LED functionality...

>> Security: The LED-control bindings should be handled only in the boot / init phase (thus in UCM BootSequence section) and the sysfs interface files should be read-only for normal users.
> 
> Yes that make sense, but it will require some extra helper to that, I guess it
> could be an extra flag to the alsactl restore command which already gets run
> at boot, or an extra alsactl command ?

The alsactl does the BootSequence initialization when UCM is supported in
alsa-lib. But, we have a little issue that the this sequence is executed only
if some controls are changed (added or removed) between last alsa state config
(/var/lib/alsa/asound.state) or if the state for the given card does not exist
to not override the values which may be changed by the user. It really depends
on the control API only.

Apparently, we need another sequence which will be forcefully executed on
boot. ColdSequence , FixedBootSequence, ForcedSequence, ForcedBootSequence ?

					Jaroslav

-- 
Jaroslav Kysela <perex@perex.cz>
Linux Sound Maintainer; ALSA Project; Red Hat, Inc.

  reply	other threads:[~2021-03-05 13:03 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-15 14:24 [RFC 0/2] ASoC: rt5670: Add LED trigger support Hans de Goede
2021-02-15 14:24 ` [RFC 1/2] ASoC: Add new SOC_DOUBLE*_ACCESS() macros Hans de Goede
2021-02-15 14:24 ` [RFC 2/2] ASoC: rt5670: Add LED trigger support Hans de Goede
2021-02-23 13:45   ` Mark Brown
2021-02-23 13:59     ` Hans de Goede
2021-02-23 14:09       ` Mark Brown
2021-02-23 14:21         ` Takashi Iwai
2021-02-23 16:14           ` Jaroslav Kysela
2021-02-23 16:20             ` Takashi Iwai
2021-02-23 20:56               ` Jaroslav Kysela
2021-02-24  7:12                 ` Takashi Iwai
2021-02-24  8:14                   ` Jaroslav Kysela
2021-02-24  8:52                     ` Takashi Iwai
2021-02-24  9:27                       ` Jaroslav Kysela
2021-02-24  9:38                         ` Takashi Iwai
2021-02-24  9:49                           ` Jaroslav Kysela
2021-02-24 10:33                             ` Takashi Iwai
2021-02-24 10:56                               ` Jaroslav Kysela
2021-02-24 11:43                                 ` Takashi Iwai
2021-02-24 12:08                                   ` Jaroslav Kysela
2021-02-24 12:42                                     ` Takashi Iwai
2021-02-24 17:57                                       ` Jaroslav Kysela
2021-02-25 11:00                                         ` Takashi Iwai
2021-02-25 18:09                                           ` Jaroslav Kysela
2021-02-26  8:41                                             ` Takashi Iwai
2021-02-26  9:22                                               ` Jaroslav Kysela
2021-02-23 17:07             ` Hans de Goede
2021-02-23 17:20             ` Mark Brown
2021-02-23 19:03               ` Hans de Goede
2021-02-24 12:59                 ` Mark Brown
2021-02-24 19:14                   ` Hans de Goede
2021-02-24 19:36                     ` Mark Brown
2021-02-24 20:09                       ` Hans de Goede
2021-02-25 14:59                         ` Mark Brown
2021-02-25 18:45                           ` Hans de Goede
2021-03-01 13:23                             ` Mark Brown
2021-03-01 13:39                               ` Hans de Goede
2021-03-01 19:15                                 ` Mark Brown
2021-03-01 19:49                                   ` Hans de Goede
2021-03-01 20:43                                     ` Mark Brown
2021-03-01 21:26                                       ` Hans de Goede
2021-03-02 12:41                                         ` Mark Brown
2021-03-02 21:14                                         ` Jaroslav Kysela
2021-03-04 19:39                                           ` Hans de Goede
2021-03-05 13:02                                             ` Jaroslav Kysela [this message]
2021-03-07 13:51                                               ` Hans de Goede

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=28fffebd-1ce9-7480-0f2f-ed8369abddf1@perex.cz \
    --to=perex@perex.cz \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@kernel.org \
    --cc=hdegoede@redhat.com \
    --cc=tiwai@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).