Jiri Slaby f034b6
From: Hans de Goede <hdegoede@redhat.com>
Jiri Slaby f034b6
Date: Fri, 17 Feb 2023 15:42:08 +0100
Jiri Slaby f034b6
Subject: [PATCH] platform/x86: nvidia-wmi-ec-backlight: Add force module
Jiri Slaby f034b6
 parameter
Jiri Slaby f034b6
References: bsc#1012628
Jiri Slaby f034b6
Patch-mainline: 6.2.1
Jiri Slaby f034b6
Git-commit: 0d9bdd8a550170306c2021b8d6766c5343b870c2
Jiri Slaby f034b6
Jiri Slaby f034b6
commit 0d9bdd8a550170306c2021b8d6766c5343b870c2 upstream.
Jiri Slaby f034b6
Jiri Slaby f034b6
On some Lenovo Legion models, the backlight might be driven by either
Jiri Slaby f034b6
one of nvidia_wmi_ec_backlight or amdgpu_bl0 at different times.
Jiri Slaby f034b6
Jiri Slaby f034b6
When the Nvidia WMI EC backlight interface reports the backlight is
Jiri Slaby f034b6
controlled by the EC, the current backlight handling only registers
Jiri Slaby f034b6
nvidia_wmi_ec_backlight (and registers no other backlight interfaces).
Jiri Slaby f034b6
Jiri Slaby f034b6
This hides (never registers) the amdgpu_bl0 interface, where as prior
Jiri Slaby f034b6
to 6.1.4 users would have both nvidia_wmi_ec_backlight and amdgpu_bl0
Jiri Slaby f034b6
and could work around things in userspace.
Jiri Slaby f034b6
Jiri Slaby f034b6
Add a force module parameter which can be used with acpi_backlight=native
Jiri Slaby f034b6
to restore the old behavior as a workound (for now) by passing:
Jiri Slaby f034b6
Jiri Slaby f034b6
"acpi_backlight=native nvidia-wmi-ec-backlight.force=1"
Jiri Slaby f034b6
Jiri Slaby f034b6
Fixes: 8d0ca287fd8c ("platform/x86: nvidia-wmi-ec-backlight: Use acpi_video_get_backlight_type()")
Jiri Slaby f034b6
Link: https://bugzilla.kernel.org/show_bug.cgi?id=217026
Jiri Slaby f034b6
Cc: stable@vger.kernel.org
Jiri Slaby f034b6
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Jiri Slaby f034b6
Reviewed-by: Daniel Dadap <ddadap@nvidia.com>
Jiri Slaby f034b6
Link: https://lore.kernel.org/r/20230217144208.5721-1-hdegoede@redhat.com
Jiri Slaby f034b6
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Jiri Slaby f034b6
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Jiri Slaby f034b6
---
Jiri Slaby f034b6
 drivers/platform/x86/nvidia-wmi-ec-backlight.c | 6 +++++-
Jiri Slaby f034b6
 1 file changed, 5 insertions(+), 1 deletion(-)
Jiri Slaby f034b6
Jiri Slaby f034b6
diff --git a/drivers/platform/x86/nvidia-wmi-ec-backlight.c b/drivers/platform/x86/nvidia-wmi-ec-backlight.c
Jiri Slaby f034b6
index baccdf65..1b572c90 100644
Jiri Slaby f034b6
--- a/drivers/platform/x86/nvidia-wmi-ec-backlight.c
Jiri Slaby f034b6
+++ b/drivers/platform/x86/nvidia-wmi-ec-backlight.c
Jiri Slaby f034b6
@@ -12,6 +12,10 @@
Jiri Slaby f034b6
 #include <linux/wmi.h>
Jiri Slaby f034b6
 #include <acpi/video.h>
Jiri Slaby f034b6
 
Jiri Slaby f034b6
+static bool force;
Jiri Slaby f034b6
+module_param(force, bool, 0444);
Jiri Slaby f034b6
+MODULE_PARM_DESC(force, "Force loading (disable acpi_backlight=xxx checks");
Jiri Slaby f034b6
+
Jiri Slaby f034b6
 /**
Jiri Slaby f034b6
  * wmi_brightness_notify() - helper function for calling WMI-wrapped ACPI method
Jiri Slaby f034b6
  * @w:    Pointer to the struct wmi_device identified by %WMI_BRIGHTNESS_GUID
Jiri Slaby f034b6
@@ -91,7 +95,7 @@ static int nvidia_wmi_ec_backlight_probe(struct wmi_device *wdev, const void *ct
Jiri Slaby f034b6
 	int ret;
Jiri Slaby f034b6
 
Jiri Slaby f034b6
 	/* drivers/acpi/video_detect.c also checks that SOURCE == EC */
Jiri Slaby f034b6
-	if (acpi_video_get_backlight_type() != acpi_backlight_nvidia_wmi_ec)
Jiri Slaby f034b6
+	if (!force && acpi_video_get_backlight_type() != acpi_backlight_nvidia_wmi_ec)
Jiri Slaby f034b6
 		return -ENODEV;
Jiri Slaby f034b6
 
Jiri Slaby f034b6
 	/*
Jiri Slaby f034b6
-- 
Jiri Slaby f034b6
2.35.3
Jiri Slaby f034b6