mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	leds: trigger: Introduce audio mute LED trigger
This patch adds a new LED trigger for coupling the audio mixer change with the LED on laptops or other devices. Currently there are two trigger types, "audio-mute" and "audio-micmute". The audio driver triggers the LED brightness change via ledtrig_audio_set() call with the proper type (either mute or mic-mute). OTOH, the consumers may call ledtrig_audio_get() for the initial brightness value that may have been set by the audio driver beforehand. This new stuff will be used by HD-audio codec driver and some platform drivers (thinkpad_acpi and dell-laptop, also upcoming huawei-wmi). Acked-by: Jacek Anaszewski <jacek.anaszewski@gmail.com> Acked-by: Pavel Machek <pavel@ucw.cz> Acked-by: Pali Rohár <pali.rohar@gmail.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
		
							parent
							
								
									9ff01193a2
								
							
						
					
					
						commit
						faa2541f5b
					
				
					 4 changed files with 72 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -136,4 +136,11 @@ config LEDS_TRIGGER_PATTERN
 | 
			
		|||
	  which is a series of tuples, of brightness and duration (ms).
 | 
			
		||||
	  If unsure, say N
 | 
			
		||||
 | 
			
		||||
config LEDS_TRIGGER_AUDIO
 | 
			
		||||
	tristate "Audio Mute LED Trigger"
 | 
			
		||||
	help
 | 
			
		||||
	  This allows LEDs to be controlled by audio drivers for following
 | 
			
		||||
	  the audio mute and mic-mute changes.
 | 
			
		||||
	  If unsure, say N
 | 
			
		||||
 | 
			
		||||
endif # LEDS_TRIGGERS
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,3 +14,4 @@ obj-$(CONFIG_LEDS_TRIGGER_CAMERA)	+= ledtrig-camera.o
 | 
			
		|||
obj-$(CONFIG_LEDS_TRIGGER_PANIC)	+= ledtrig-panic.o
 | 
			
		||||
obj-$(CONFIG_LEDS_TRIGGER_NETDEV)	+= ledtrig-netdev.o
 | 
			
		||||
obj-$(CONFIG_LEDS_TRIGGER_PATTERN)	+= ledtrig-pattern.o
 | 
			
		||||
obj-$(CONFIG_LEDS_TRIGGER_AUDIO)	+= ledtrig-audio.o
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										44
									
								
								drivers/leds/trigger/ledtrig-audio.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								drivers/leds/trigger/ledtrig-audio.c
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,44 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0
 | 
			
		||||
//
 | 
			
		||||
// Audio Mute LED trigger
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include <linux/kernel.h>
 | 
			
		||||
#include <linux/leds.h>
 | 
			
		||||
#include <linux/module.h>
 | 
			
		||||
 | 
			
		||||
static struct led_trigger *ledtrig_audio[NUM_AUDIO_LEDS];
 | 
			
		||||
static enum led_brightness audio_state[NUM_AUDIO_LEDS];
 | 
			
		||||
 | 
			
		||||
enum led_brightness ledtrig_audio_get(enum led_audio type)
 | 
			
		||||
{
 | 
			
		||||
	return audio_state[type];
 | 
			
		||||
}
 | 
			
		||||
EXPORT_SYMBOL_GPL(ledtrig_audio_get);
 | 
			
		||||
 | 
			
		||||
void ledtrig_audio_set(enum led_audio type, enum led_brightness state)
 | 
			
		||||
{
 | 
			
		||||
	audio_state[type] = state;
 | 
			
		||||
	led_trigger_event(ledtrig_audio[type], state);
 | 
			
		||||
}
 | 
			
		||||
EXPORT_SYMBOL_GPL(ledtrig_audio_set);
 | 
			
		||||
 | 
			
		||||
static int __init ledtrig_audio_init(void)
 | 
			
		||||
{
 | 
			
		||||
	led_trigger_register_simple("audio-mute",
 | 
			
		||||
				    &ledtrig_audio[LED_AUDIO_MUTE]);
 | 
			
		||||
	led_trigger_register_simple("audio-micmute",
 | 
			
		||||
				    &ledtrig_audio[LED_AUDIO_MICMUTE]);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
module_init(ledtrig_audio_init);
 | 
			
		||||
 | 
			
		||||
static void __exit ledtrig_audio_exit(void)
 | 
			
		||||
{
 | 
			
		||||
	led_trigger_unregister_simple(ledtrig_audio[LED_AUDIO_MUTE]);
 | 
			
		||||
	led_trigger_unregister_simple(ledtrig_audio[LED_AUDIO_MICMUTE]);
 | 
			
		||||
}
 | 
			
		||||
module_exit(ledtrig_audio_exit);
 | 
			
		||||
 | 
			
		||||
MODULE_DESCRIPTION("LED trigger for audio mute control");
 | 
			
		||||
MODULE_LICENSE("GPL v2");
 | 
			
		||||
| 
						 | 
				
			
			@ -487,4 +487,24 @@ struct led_pattern {
 | 
			
		|||
	int brightness;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum led_audio {
 | 
			
		||||
	LED_AUDIO_MUTE,		/* master mute LED */
 | 
			
		||||
	LED_AUDIO_MICMUTE,	/* mic mute LED */
 | 
			
		||||
	NUM_AUDIO_LEDS
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#if IS_ENABLED(CONFIG_LEDS_TRIGGER_AUDIO)
 | 
			
		||||
enum led_brightness ledtrig_audio_get(enum led_audio type);
 | 
			
		||||
void ledtrig_audio_set(enum led_audio type, enum led_brightness state);
 | 
			
		||||
#else
 | 
			
		||||
static inline enum led_brightness ledtrig_audio_get(enum led_audio type)
 | 
			
		||||
{
 | 
			
		||||
	return LED_OFF;
 | 
			
		||||
}
 | 
			
		||||
static inline void ledtrig_audio_set(enum led_audio type,
 | 
			
		||||
				     enum led_brightness state)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif		/* __LINUX_LEDS_H_INCLUDED */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue