Merge tag 'selinux-pr-20210629' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / drivers / platform / x86 / dell / dell-laptop.c
index 70edc5bb3a146082599c348a07f5a1d930e88c25..8230e7a68a5ebdf1b81f3974c44330503725e87d 100644 (file)
@@ -31,6 +31,8 @@
 #include "dell-rbtn.h"
 #include "dell-smbios.h"
 
+#include "dell-wmi-privacy.h"
+
 struct quirk_entry {
        bool touchpad_led;
        bool kbd_led_not_present;
@@ -90,6 +92,7 @@ static struct rfkill *wifi_rfkill;
 static struct rfkill *bluetooth_rfkill;
 static struct rfkill *wwan_rfkill;
 static bool force_rfkill;
+static bool micmute_led_registered;
 
 module_param(force_rfkill, bool, 0444);
 MODULE_PARM_DESC(force_rfkill, "enable rfkill on non whitelisted models");
@@ -2205,11 +2208,13 @@ static int __init dell_init(void)
        dell_laptop_register_notifier(&dell_laptop_notifier);
 
        if (dell_smbios_find_token(GLOBAL_MIC_MUTE_DISABLE) &&
-           dell_smbios_find_token(GLOBAL_MIC_MUTE_ENABLE)) {
+           dell_smbios_find_token(GLOBAL_MIC_MUTE_ENABLE) &&
+           !dell_privacy_has_mic_mute()) {
                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;
+               micmute_led_registered = true;
        }
 
        if (acpi_video_get_backlight_type() != acpi_backlight_vendor)
@@ -2257,7 +2262,8 @@ static int __init dell_init(void)
 fail_get_brightness:
        backlight_device_unregister(dell_backlight_device);
 fail_backlight:
-       led_classdev_unregister(&micmute_led_cdev);
+       if (micmute_led_registered)
+               led_classdev_unregister(&micmute_led_cdev);
 fail_led:
        dell_cleanup_rfkill();
 fail_rfkill:
@@ -2278,7 +2284,8 @@ static void __exit dell_exit(void)
                touchpad_led_exit();
        kbd_led_exit();
        backlight_device_unregister(dell_backlight_device);
-       led_classdev_unregister(&micmute_led_cdev);
+       if (micmute_led_registered)
+               led_classdev_unregister(&micmute_led_cdev);
        dell_cleanup_rfkill();
        if (platform_device) {
                platform_device_unregister(platform_device);