[PATCH] ASoC: SOF: topology: use new sound control LED layer
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(-)
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);
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
participants (2)
-
Jaroslav Kysela
-
Péter Ujfalusi