RE: [PATCH] ASoC: rt715:add Mic Mute LED control support
From: Limonciello, Mario
Date: Tue Nov 03 2020 - 12:52:20 EST
> -----Original Message-----
> From: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx>
> Sent: Tuesday, November 3, 2020 10:13
> To: Mark Brown; Yuan, Perry
> Cc: oder_chiou@xxxxxxxxxxx; alsa-devel@xxxxxxxxxxxxxxxx; lgirdwood@xxxxxxxxx;
> Limonciello, Mario; linux-kernel@xxxxxxxxxxxxxxx; tiwai@xxxxxxxx
> Subject: Re: [PATCH] ASoC: rt715:add Mic Mute LED control support
>
>
> [EXTERNAL EMAIL]
>
> Somehow this patch was filtered by alsa-devel servers?
>
> On 11/3/20 7:12 AM, Mark Brown wrote:
> > On Tue, Nov 03, 2020 at 04:58:59AM -0800, Perry Yuan wrote:
> >> From: perry_yuan <perry_yuan@xxxxxxxx>
> >>
> >> Some new Dell system is going to support audio internal micphone
> >> privacy setting from hardware level with micmute led state changing
> >>
> >> This patch allow to change micmute led state through this micphone
> >> led control interface like hda_generic provided.
> >
> > If this is useful it should be done at the subsystem level rather than
> > open coded in a specific CODEC driver, however I don't undersand why it
> > is.
> >
> >> +static int rt715_micmute_led_mode_put(struct snd_kcontrol *kcontrol,
> >> + struct snd_ctl_elem_value *ucontrol)
> >> +{
> >> + struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
> >> + struct rt715_priv *rt715 = snd_soc_component_get_drvdata(component);
> >> + int led_mode = ucontrol->value.integer.value[0];
> >> +
> >> + rt715->micmute_led = led_mode;
> >> +#if IS_ENABLED(CONFIG_LEDS_TRIGGER_AUDIO)
> >> + ledtrig_audio_set(LED_AUDIO_MICMUTE,
> >> + rt715->micmute_led ? LED_ON : LED_OFF);
> >> +#endif
> >> + return 0;
> >> +}
> >
> > This is just adding a userspace API to set a LED via the standard LED
> > APIs. Since the LED subsystem already has a perfectly good userspace
> > API why not use that? There is no visible value in this being in the
> > sound subsystem.
>
> I also don't quite follow. This looks as inspired from HDaudio code, but
> with a lot of simplifications.
>
> If the intent was that when userspace decides to mute the LED is turned
> on, wouldn't it be enough to just track the state of a 'capture switch'
> responsible for mute, i.e. when the capture Switch is 'off' the LED is
> on. I don't see the point of having a new control, you would be adding
> more work for PulseAudio/UCM whereas connecting the capture switch to a
> led comes with zero work in userspace. See e.g. how the mute mic LED was
> handled in the SOF code handling DMICs, we didn't add a new control but
> turned the LED in the switch .put callback, see
>
> https://elixir.bootlin.com/linux/latest/source/sound/soc/sof/control.c#L18
>
> https://elixir.bootlin.com/linux/latest/source/sound/soc/sof/control.c#L153
>
> Actually thinking more about it, having two controls for 'mute LED' and
> 'capture switch' could lead to inconsistent states where the LED is on
> without mute being activated. we should really bolt the LED activation
> to the capture switch, that way the mute and LED states are aligned.
>
After giving it some thought I agree. The UCM change that was opened
here https://github.com/alsa-project/alsa-ucm-conf/pull/60 wouldn't
be necessary at all if you just track capture switch directly like SOF does.