mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-01 17:08:10 +00:00
platform/x86: thinkpad_acpi: Add audio mute LED classdev support
In the upcoming change, the binding of audio mute / mic-mute LED controls will be switched with LED trigger. This patch is the last piece of preparation: adding the audio mute / mic-mute LED class devices to thinkpad_acpi driver. Two devices, platform::mute and platform::micmute, will be added for controlling the mute LED and mic-mute LED, respectively. The new prefix "platform" is the suggestion by upstream for indicating the generic laptop attribute. Also this selects CONFIG_LEDS_TRIGGERS and CONFIG_LEDS_TRIGGERS_AUDIO unconditionally. Strictly speaking, these aren't 100% mandatory, but leaving these manual selections would lead to a functional regression easily once after converting from the dynamic symbol binding to the LEDs trigger in a later patch. Acked-by: Jacek Anaszewski <jacek.anaszewski@gmail.com> Acked-by: Pavel Machek <pavel@ucw.cz> Acked-by: Andy Shevchenko <andy.shevchenko@gmail.com> Acked-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br> Acked-by: Pali Rohár <pali.rohar@gmail.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
d00fa46e0a
commit
4e1d092445
2 changed files with 53 additions and 6 deletions
|
@ -495,6 +495,8 @@ config THINKPAD_ACPI
|
|||
select NVRAM
|
||||
select NEW_LEDS
|
||||
select LEDS_CLASS
|
||||
select LEDS_TRIGGERS
|
||||
select LEDS_TRIGGER_AUDIO
|
||||
---help---
|
||||
This is a driver for the IBM and Lenovo ThinkPad laptops. It adds
|
||||
support for Fn-Fx key combinations, Bluetooth control, video
|
||||
|
|
|
@ -9203,17 +9203,58 @@ int tpacpi_led_set(int whichled, bool on)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(tpacpi_led_set);
|
||||
|
||||
static int tpacpi_led_mute_set(struct led_classdev *led_cdev,
|
||||
enum led_brightness brightness)
|
||||
{
|
||||
return tpacpi_led_set(TPACPI_LED_MUTE, brightness != LED_OFF);
|
||||
}
|
||||
|
||||
static int tpacpi_led_micmute_set(struct led_classdev *led_cdev,
|
||||
enum led_brightness brightness)
|
||||
{
|
||||
return tpacpi_led_set(TPACPI_LED_MICMUTE, brightness != LED_OFF);
|
||||
}
|
||||
|
||||
static struct led_classdev mute_led_cdev[] = {
|
||||
[TPACPI_LED_MUTE] = {
|
||||
.name = "platform::mute",
|
||||
.max_brightness = 1,
|
||||
.brightness_set_blocking = tpacpi_led_mute_set,
|
||||
.default_trigger = "audio-mute",
|
||||
},
|
||||
[TPACPI_LED_MICMUTE] = {
|
||||
.name = "platform::micmute",
|
||||
.max_brightness = 1,
|
||||
.brightness_set_blocking = tpacpi_led_micmute_set,
|
||||
.default_trigger = "audio-micmute",
|
||||
},
|
||||
};
|
||||
|
||||
static int mute_led_init(struct ibm_init_struct *iibm)
|
||||
{
|
||||
static enum led_audio types[] = {
|
||||
[TPACPI_LED_MUTE] = LED_AUDIO_MUTE,
|
||||
[TPACPI_LED_MICMUTE] = LED_AUDIO_MICMUTE,
|
||||
};
|
||||
acpi_handle temp;
|
||||
int i;
|
||||
int i, err;
|
||||
|
||||
for (i = 0; i < TPACPI_LED_MAX; i++) {
|
||||
struct tp_led_table *t = &led_tables[i];
|
||||
if (ACPI_SUCCESS(acpi_get_handle(hkey_handle, t->name, &temp)))
|
||||
mute_led_on_off(t, false);
|
||||
else
|
||||
if (ACPI_FAILURE(acpi_get_handle(hkey_handle, t->name, &temp))) {
|
||||
t->state = -ENODEV;
|
||||
continue;
|
||||
}
|
||||
|
||||
mute_led_cdev[i].brightness = ledtrig_audio_get(types[i]);
|
||||
err = led_classdev_register(&tpacpi_pdev->dev, &mute_led_cdev[i]);
|
||||
if (err < 0) {
|
||||
while (i--) {
|
||||
if (led_tables[i].state >= 0)
|
||||
led_classdev_unregister(&mute_led_cdev[i]);
|
||||
}
|
||||
return err;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -9222,8 +9263,12 @@ static void mute_led_exit(void)
|
|||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < TPACPI_LED_MAX; i++)
|
||||
tpacpi_led_set(i, false);
|
||||
for (i = 0; i < TPACPI_LED_MAX; i++) {
|
||||
if (led_tables[i].state >= 0) {
|
||||
led_classdev_unregister(&mute_led_cdev[i]);
|
||||
tpacpi_led_set(i, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void mute_led_resume(void)
|
||||
|
|
Loading…
Reference in a new issue