Commit d00fa46e authored by Takashi Iwai's avatar Takashi Iwai
Browse files

platform/x86: dell-laptop: Add micmute LED trigger support



This patch adds the LED trigger support for audio mic-mute control.
As of this patch, the LED device isn't tied with the audio driver, and
can be changed via user-space at "platform::micmute" sysfs entry.
(This new prefix "platform" is the agreement among people for
indicating the generic laptop / system-wide attribute.)

The binding with HD-audio is still done via the existing exported
dell_micmute_led_set().  It will be replaced with the LED trigger
binding in later patches.

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: default avatarJacek Anaszewski <jacek.anaszewski@gmail.com>
Acked-by: default avatarPavel Machek <pavel@ucw.cz>
Acked-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
Acked-by: default avatarPali Rohár <pali.rohar@gmail.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent faa2541f
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -177,6 +177,8 @@ config DELL_LAPTOP
	select POWER_SUPPLY
	select LEDS_CLASS
	select NEW_LEDS
	select LEDS_TRIGGERS
	select LEDS_TRIGGER_AUDIO
	---help---
	This driver adds support for rfkill and backlight control to Dell
	laptops (except for some models covered by the Compal driver).
+25 −0
Original line number Diff line number Diff line
@@ -2131,6 +2131,23 @@ int dell_micmute_led_set(int state)
}
EXPORT_SYMBOL_GPL(dell_micmute_led_set);

static int micmute_led_set(struct led_classdev *led_cdev,
			   enum led_brightness brightness)
{
	int state = brightness != LED_OFF;
	int err;

	err = dell_micmute_led_set(state);
	return err < 0 ? err : 0;
}

static struct led_classdev micmute_led_cdev = {
	.name = "platform::micmute",
	.max_brightness = 1,
	.brightness_set_blocking = micmute_led_set,
	.default_trigger = "audio-micmute",
};

static int __init dell_init(void)
{
	struct calling_interface_token *token;
@@ -2175,6 +2192,11 @@ static int __init dell_init(void)

	dell_laptop_register_notifier(&dell_laptop_notifier);

	micmute_led_cdev.brightness = ledtrig_audio_get(LED_AUDIO_MICMUTE);
	ret = led_classdev_register(&platform_device->dev, &micmute_led_cdev);
	if (ret < 0)
		goto fail_led;

	if (acpi_video_get_backlight_type() != acpi_backlight_vendor)
		return 0;

@@ -2220,6 +2242,8 @@ static int __init dell_init(void)
fail_get_brightness:
	backlight_device_unregister(dell_backlight_device);
fail_backlight:
	led_classdev_unregister(&micmute_led_cdev);
fail_led:
	dell_cleanup_rfkill();
fail_rfkill:
	platform_device_del(platform_device);
@@ -2239,6 +2263,7 @@ static void __exit dell_exit(void)
		touchpad_led_exit();
	kbd_led_exit();
	backlight_device_unregister(dell_backlight_device);
	led_classdev_unregister(&micmute_led_cdev);
	dell_cleanup_rfkill();
	if (platform_device) {
		platform_device_unregister(platform_device);