18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci// 38c2ecf20Sopenharmony_ci// Audio Mute LED trigger 48c2ecf20Sopenharmony_ci// 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#include <linux/kernel.h> 78c2ecf20Sopenharmony_ci#include <linux/leds.h> 88c2ecf20Sopenharmony_ci#include <linux/module.h> 98c2ecf20Sopenharmony_ci#include "../leds.h" 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_cistatic enum led_brightness audio_state[NUM_AUDIO_LEDS]; 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_cistatic int ledtrig_audio_mute_activate(struct led_classdev *led_cdev) 148c2ecf20Sopenharmony_ci{ 158c2ecf20Sopenharmony_ci led_set_brightness_nosleep(led_cdev, audio_state[LED_AUDIO_MUTE]); 168c2ecf20Sopenharmony_ci return 0; 178c2ecf20Sopenharmony_ci} 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_cistatic int ledtrig_audio_micmute_activate(struct led_classdev *led_cdev) 208c2ecf20Sopenharmony_ci{ 218c2ecf20Sopenharmony_ci led_set_brightness_nosleep(led_cdev, audio_state[LED_AUDIO_MICMUTE]); 228c2ecf20Sopenharmony_ci return 0; 238c2ecf20Sopenharmony_ci} 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_cistatic struct led_trigger ledtrig_audio[NUM_AUDIO_LEDS] = { 268c2ecf20Sopenharmony_ci [LED_AUDIO_MUTE] = { 278c2ecf20Sopenharmony_ci .name = "audio-mute", 288c2ecf20Sopenharmony_ci .activate = ledtrig_audio_mute_activate, 298c2ecf20Sopenharmony_ci }, 308c2ecf20Sopenharmony_ci [LED_AUDIO_MICMUTE] = { 318c2ecf20Sopenharmony_ci .name = "audio-micmute", 328c2ecf20Sopenharmony_ci .activate = ledtrig_audio_micmute_activate, 338c2ecf20Sopenharmony_ci }, 348c2ecf20Sopenharmony_ci}; 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_cienum led_brightness ledtrig_audio_get(enum led_audio type) 378c2ecf20Sopenharmony_ci{ 388c2ecf20Sopenharmony_ci return audio_state[type]; 398c2ecf20Sopenharmony_ci} 408c2ecf20Sopenharmony_ciEXPORT_SYMBOL_GPL(ledtrig_audio_get); 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_civoid ledtrig_audio_set(enum led_audio type, enum led_brightness state) 438c2ecf20Sopenharmony_ci{ 448c2ecf20Sopenharmony_ci audio_state[type] = state; 458c2ecf20Sopenharmony_ci led_trigger_event(&ledtrig_audio[type], state); 468c2ecf20Sopenharmony_ci} 478c2ecf20Sopenharmony_ciEXPORT_SYMBOL_GPL(ledtrig_audio_set); 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_cistatic int __init ledtrig_audio_init(void) 508c2ecf20Sopenharmony_ci{ 518c2ecf20Sopenharmony_ci led_trigger_register(&ledtrig_audio[LED_AUDIO_MUTE]); 528c2ecf20Sopenharmony_ci led_trigger_register(&ledtrig_audio[LED_AUDIO_MICMUTE]); 538c2ecf20Sopenharmony_ci return 0; 548c2ecf20Sopenharmony_ci} 558c2ecf20Sopenharmony_cimodule_init(ledtrig_audio_init); 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_cistatic void __exit ledtrig_audio_exit(void) 588c2ecf20Sopenharmony_ci{ 598c2ecf20Sopenharmony_ci led_trigger_unregister(&ledtrig_audio[LED_AUDIO_MUTE]); 608c2ecf20Sopenharmony_ci led_trigger_unregister(&ledtrig_audio[LED_AUDIO_MICMUTE]); 618c2ecf20Sopenharmony_ci} 628c2ecf20Sopenharmony_cimodule_exit(ledtrig_audio_exit); 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_ciMODULE_DESCRIPTION("LED trigger for audio mute control"); 658c2ecf20Sopenharmony_ciMODULE_LICENSE("GPL v2"); 66