Hi Jaroslav, On 29/03/2022 11:03, Jaroslav Kysela wrote: > Use the new sound control LED layer instead the direct ledtrig_audio_set() > call - see 22d8de62f11b ("ALSA: control - add generic LED trigger module > as the new control layer"). Don't we need to select SND_CTL_LED from SOF to make sure that the LED trigger module is available? > Signed-off-by: Jaroslav Kysela <perex@xxxxxxxx> > Cc: Ranjani Sridharan <ranjani.sridharan@xxxxxxxxxxxxxxx> > Cc: Bard Liao <yung-chuan.liao@xxxxxxxxxxxxxxx> > Cc: Péter Ujfalusi <peter.ujfalusi@xxxxxxxxxxxxxxx> > Cc: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx> > --- > sound/soc/sof/control.c | 33 --------------------------------- > sound/soc/sof/topology.c | 10 ++++++++++ > 2 files changed, 10 insertions(+), 33 deletions(-) > > diff --git a/sound/soc/sof/control.c b/sound/soc/sof/control.c > index de1778c4002b..3b5718a3516d 100644 > --- a/sound/soc/sof/control.c > +++ b/sound/soc/sof/control.c > @@ -15,36 +15,6 @@ > #include "sof-priv.h" > #include "sof-audio.h" > > -static void update_mute_led(struct snd_sof_control *scontrol, > - struct snd_kcontrol *kcontrol, > - struct snd_ctl_elem_value *ucontrol) > -{ > - int temp = 0; > - int mask; > - int i; > - > - mask = 1U << snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); > - > - for (i = 0; i < scontrol->num_channels; i++) { > - if (ucontrol->value.integer.value[i]) { > - temp |= mask; > - break; > - } > - } > - > - if (temp == scontrol->led_ctl.led_value) > - return; > - > - scontrol->led_ctl.led_value = temp; > - > -#if IS_REACHABLE(CONFIG_LEDS_TRIGGER_AUDIO) > - if (!scontrol->led_ctl.direction) > - ledtrig_audio_set(LED_AUDIO_MUTE, temp ? LED_OFF : LED_ON); > - else > - ledtrig_audio_set(LED_AUDIO_MICMUTE, temp ? LED_OFF : LED_ON); > -#endif > -} > - > int snd_sof_volume_get(struct snd_kcontrol *kcontrol, > struct snd_ctl_elem_value *ucontrol) > { > @@ -121,9 +91,6 @@ int snd_sof_switch_put(struct snd_kcontrol *kcontrol, > struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp); > const struct sof_ipc_tplg_ops *tplg_ops = sdev->ipc->ops->tplg; > > - if (scontrol->led_ctl.use_led) > - update_mute_led(scontrol, kcontrol, ucontrol); > - > if (tplg_ops->control->switch_put) > return tplg_ops->control->switch_put(scontrol, ucontrol); > > diff --git a/sound/soc/sof/topology.c b/sound/soc/sof/topology.c > index 9b11e9795a7a..267a781494da 100644 > --- a/sound/soc/sof/topology.c > +++ b/sound/soc/sof/topology.c > @@ -773,6 +773,7 @@ static int sof_control_load_volume(struct snd_soc_component *scomp, > struct snd_soc_tplg_mixer_control *mc = > container_of(hdr, struct snd_soc_tplg_mixer_control, hdr); > int tlv[TLV_ITEMS]; > + unsigned int mask; > int ret; > > /* validate topology data */ > @@ -821,6 +822,15 @@ static int sof_control_load_volume(struct snd_soc_component *scomp, > goto err; > } > > + if (scontrol->led_ctl.use_led) { > + mask = scontrol->led_ctl.direction ? SNDRV_CTL_ELEM_ACCESS_MIC_LED : > + SNDRV_CTL_ELEM_ACCESS_SPK_LED; > + scontrol->access &= ~SNDRV_CTL_ELEM_ACCESS_LED_MASK; > + scontrol->access |= mask; > + kc->access &= ~SNDRV_CTL_ELEM_ACCESS_LED_MASK; > + kc->access |= mask; > + } > + > dev_dbg(scomp->dev, "tplg: load kcontrol index %d chans %d\n", > scontrol->comp_id, scontrol->num_channels); > -- Péter