Message ID | 20220329080351.2384110-1-perex@perex.cz (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | ASoC: SOF: topology: use new sound control LED layer | expand |
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@perex.cz> > Cc: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> > Cc: Bard Liao <yung-chuan.liao@linux.intel.com> > Cc: Péter Ujfalusi <peter.ujfalusi@linux.intel.com> > Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> > --- > 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); >
On 29. 03. 22 12:16, Péter Ujfalusi wrote: > 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? This feature is optional and the current code does not even forcefully select the LEDS_TRIGGERS and LEDS_TRIGGER_AUDIO, too. There was IS_REACHABLE(CONFIG_LEDS_TRIGGER_AUDIO) condition. I think that this change should be handled separately (if required). Unfortunately, I forgot to call snd_ctl_led_request() to load the LED trigger module when available. I will send v2 ASAP. Jaroslav
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);
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"). Signed-off-by: Jaroslav Kysela <perex@perex.cz> Cc: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Cc: Bard Liao <yung-chuan.liao@linux.intel.com> Cc: Péter Ujfalusi <peter.ujfalusi@linux.intel.com> Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> --- sound/soc/sof/control.c | 33 --------------------------------- sound/soc/sof/topology.c | 10 ++++++++++ 2 files changed, 10 insertions(+), 33 deletions(-)