Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ALSA: control-led: Integrate mute led trigger

This driver is the only one calling ledtrig_audio_set(), therefore
the LED audio trigger isn't usable standalone. So it makes sense
to fully integrate LED audio triger handling here.

The module aliases ensure that the driver is auto-loaded (if built
as module) if a LED device has one of the two audio triggers as
default trigger.

In addition disable building the old audio mute LED trigger.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Takashi Iwai <tiwai@suse.de>
Link: https://lore.kernel.org/r/107634e6-d9ad-4a9f-881d-1eb72ea1a5a7@gmail.com
Signed-off-by: Lee Jones <lee@kernel.org>

authored by

Heiner Kallweit and committed by
Lee Jones
a24de38d 822c91e7

+17 -12
-7
drivers/leds/trigger/Kconfig
··· 136 136 which is a series of tuples, of brightness and duration (ms). 137 137 If unsure, say N 138 138 139 - config LEDS_TRIGGER_AUDIO 140 - tristate "Audio Mute LED Trigger" 141 - help 142 - This allows LEDs to be controlled by audio drivers for following 143 - the audio mute and mic-mute changes. 144 - If unsure, say N 145 - 146 139 config LEDS_TRIGGER_TTY 147 140 tristate "LED Trigger for TTY devices" 148 141 depends on TTY
-1
drivers/leds/trigger/Makefile
··· 14 14 obj-$(CONFIG_LEDS_TRIGGER_PANIC) += ledtrig-panic.o 15 15 obj-$(CONFIG_LEDS_TRIGGER_NETDEV) += ledtrig-netdev.o 16 16 obj-$(CONFIG_LEDS_TRIGGER_PATTERN) += ledtrig-pattern.o 17 - obj-$(CONFIG_LEDS_TRIGGER_AUDIO) += ledtrig-audio.o 18 17 obj-$(CONFIG_LEDS_TRIGGER_TTY) += ledtrig-tty.o
-1
sound/core/Kconfig
··· 262 262 tristate 263 263 select NEW_LEDS if SND_CTL_LED 264 264 select LEDS_TRIGGERS if SND_CTL_LED 265 - select LEDS_TRIGGER_AUDIO if SND_CTL_LED 266 265 267 266 source "sound/core/seq/Kconfig"
+17 -3
sound/core/control_led.c
··· 53 53 54 54 static DEFINE_MUTEX(snd_ctl_led_mutex); 55 55 static bool snd_ctl_led_card_valid[SNDRV_CARDS]; 56 + static struct led_trigger *snd_ctl_ledtrig_audio[NUM_AUDIO_LEDS]; 56 57 static struct snd_ctl_led snd_ctl_leds[MAX_LED] = { 57 58 { 58 59 .name = "speaker", ··· 175 174 case MODE_FOLLOW_ROUTE: if (route >= 0) route ^= 1; break; 176 175 case MODE_FOLLOW_MUTE: /* noop */ break; 177 176 } 178 - if (route >= 0) 179 - ledtrig_audio_set(led->trigger_type, route ? LED_OFF : LED_ON); 177 + if (route >= 0) { 178 + struct led_trigger *trig = snd_ctl_ledtrig_audio[led->trigger_type]; 179 + 180 + led_trigger_event(trig, route ? LED_OFF : LED_ON); 181 + } 180 182 } 181 183 182 184 static struct snd_ctl_led_ctl *snd_ctl_led_find(struct snd_kcontrol *kctl, unsigned int ioff) ··· 429 425 struct device_attribute *attr, char *buf) 430 426 { 431 427 struct snd_ctl_led *led = container_of(dev, struct snd_ctl_led, dev); 428 + struct led_trigger *trig = snd_ctl_ledtrig_audio[led->trigger_type]; 432 429 433 - return sysfs_emit(buf, "%u\n", ledtrig_audio_get(led->trigger_type)); 430 + return sysfs_emit(buf, "%u\n", led_trigger_get_brightness(trig)); 434 431 } 435 432 436 433 static DEVICE_ATTR_RW(mode); ··· 721 716 struct snd_ctl_led *led; 722 717 unsigned int group; 723 718 719 + led_trigger_register_simple("audio-mute", &snd_ctl_ledtrig_audio[LED_AUDIO_MUTE]); 720 + led_trigger_register_simple("audio-micmute", &snd_ctl_ledtrig_audio[LED_AUDIO_MICMUTE]); 721 + 724 722 device_initialize(&snd_ctl_led_dev); 725 723 snd_ctl_led_dev.class = &sound_class; 726 724 snd_ctl_led_dev.release = snd_ctl_led_dev_release; ··· 776 768 } 777 769 device_unregister(&snd_ctl_led_dev); 778 770 snd_ctl_led_clean(NULL); 771 + 772 + led_trigger_unregister_simple(snd_ctl_ledtrig_audio[LED_AUDIO_MUTE]); 773 + led_trigger_unregister_simple(snd_ctl_ledtrig_audio[LED_AUDIO_MICMUTE]); 779 774 } 780 775 781 776 module_init(snd_ctl_led_init) 782 777 module_exit(snd_ctl_led_exit) 778 + 779 + MODULE_ALIAS("ledtrig:audio-mute"); 780 + MODULE_ALIAS("ledtrig:audio-micmute");