platform-driver-x86.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede@redhat.com>
To: "Ben Skeggs" <bskeggs@redhat.com>,
	"Karol Herbst" <kherbst@redhat.com>, Lyude <lyude@redhat.com>,
	"Daniel Dadap" <ddadap@nvidia.com>,
	"Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
	"Maxime Ripard" <mripard@kernel.org>,
	"Thomas Zimmermann" <tzimmermann@suse.de>,
	"Jani Nikula" <jani.nikula@linux.intel.com>,
	"Joonas Lahtinen" <joonas.lahtinen@linux.intel.com>,
	"Rodrigo Vivi" <rodrigo.vivi@intel.com>,
	"Tvrtko Ursulin" <tvrtko.ursulin@linux.intel.com>,
	"Alex Deucher" <alexander.deucher@amd.com>,
	"Christian König" <christian.koenig@amd.com>,
	Pan@vger.kernel.org, Xinhui <Xinhui.Pan@amd.com>,
	"Rafael J . Wysocki" <rafael@kernel.org>,
	"Mika Westerberg" <mika.westerberg@linux.intel.com>,
	"Lukas Wunner" <lukas@wunner.de>,
	"Mark Gross" <markgross@kernel.org>,
	"Andy Shevchenko" <andy@kernel.org>
Cc: Hans de Goede <hdegoede@redhat.com>,
	nouveau@lists.freedesktop.org, Daniel Vetter <daniel@ffwll.ch>,
	David Airlie <airlied@linux.ie>,
	intel-gfx <intel-gfx@lists.freedesktop.org>,
	dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org,
	Len Brown <lenb@kernel.org>,
	linux-acpi@vger.kernel.org, platform-driver-x86@vger.kernel.org
Subject: [PATCH v2 16/29] ACPI: video: Add Nvidia WMI EC brightness control detection
Date: Tue, 12 Jul 2022 21:38:57 +0200	[thread overview]
Message-ID: <20220712193910.439171-17-hdegoede@redhat.com> (raw)
In-Reply-To: <20220712193910.439171-1-hdegoede@redhat.com>

On some new laptop designs a new Nvidia specific WMI interface is present
which gives info about panel brightness control and may allow controlling
the brightness through this interface when the embedded controller is used
for brightness control.

When this WMI interface is present and indicates that the EC is used,
then this interface should be used for brightness control.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 drivers/acpi/Kconfig           |  1 +
 drivers/acpi/video_detect.c    | 35 ++++++++++++++++++++++++++++++++++
 drivers/gpu/drm/gma500/Kconfig |  2 ++
 drivers/gpu/drm/i915/Kconfig   |  2 ++
 include/acpi/video.h           |  1 +
 5 files changed, 41 insertions(+)

diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
index 1e34f846508f..c372385cfc3f 100644
--- a/drivers/acpi/Kconfig
+++ b/drivers/acpi/Kconfig
@@ -212,6 +212,7 @@ config ACPI_VIDEO
 	tristate "Video"
 	depends on X86 && BACKLIGHT_CLASS_DEVICE
 	depends on INPUT
+	depends on ACPI_WMI
 	select THERMAL
 	help
 	  This driver implements the ACPI Extensions For Display Adapters
diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c
index 8c2863403040..7b89dc9a04a2 100644
--- a/drivers/acpi/video_detect.c
+++ b/drivers/acpi/video_detect.c
@@ -75,6 +75,35 @@ find_video(acpi_handle handle, u32 lvl, void *context, void **rv)
 	return AE_OK;
 }
 
+#define WMI_BRIGHTNESS_METHOD_SOURCE			2
+#define WMI_BRIGHTNESS_MODE_GET				0
+#define WMI_BRIGHTNESS_SOURCE_EC			2
+
+struct wmi_brightness_args {
+	u32 mode;
+	u32 val;
+	u32 ret;
+	u32 ignored[3];
+};
+
+static bool nvidia_wmi_ec_supported(void)
+{
+	struct wmi_brightness_args args = {
+		.mode = WMI_BRIGHTNESS_MODE_GET,
+		.val = 0,
+		.ret = 0,
+	};
+	struct acpi_buffer buf = { (acpi_size)sizeof(args), &args };
+	acpi_status status;
+
+	status = wmi_evaluate_method("603E9613-EF25-4338-A3D0-C46177516DB7", 0,
+				     WMI_BRIGHTNESS_METHOD_SOURCE, &buf, &buf);
+	if (ACPI_FAILURE(status))
+		return false;
+
+	return args.ret == WMI_BRIGHTNESS_SOURCE_EC;
+}
+
 /* Force to use vendor driver when the ACPI device is known to be
  * buggy */
 static int video_detect_force_vendor(const struct dmi_system_id *d)
@@ -518,6 +547,7 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
 static enum acpi_backlight_type __acpi_video_get_backlight_type(bool native)
 {
 	static DEFINE_MUTEX(init_mutex);
+	static bool nvidia_wmi_ec_present;
 	static bool native_available;
 	static bool init_done;
 	static long video_caps;
@@ -530,6 +560,7 @@ static enum acpi_backlight_type __acpi_video_get_backlight_type(bool native)
 		acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
 				    ACPI_UINT32_MAX, find_video, NULL,
 				    &video_caps, NULL);
+		nvidia_wmi_ec_present = nvidia_wmi_ec_supported();
 		init_done = true;
 	}
 	if (native)
@@ -547,6 +578,10 @@ static enum acpi_backlight_type __acpi_video_get_backlight_type(bool native)
 	if (acpi_backlight_dmi != acpi_backlight_undef)
 		return acpi_backlight_dmi;
 
+	/* Special cases such as nvidia_wmi_ec and apple gmux. */
+	if (nvidia_wmi_ec_present)
+		return acpi_backlight_nvidia_wmi_ec;
+
 	/* On systems with ACPI video use either native or ACPI video. */
 	if (video_caps & ACPI_VIDEO_BACKLIGHT) {
 		/*
diff --git a/drivers/gpu/drm/gma500/Kconfig b/drivers/gpu/drm/gma500/Kconfig
index 0cff20265f97..807b989e3c77 100644
--- a/drivers/gpu/drm/gma500/Kconfig
+++ b/drivers/gpu/drm/gma500/Kconfig
@@ -7,6 +7,8 @@ config DRM_GMA500
 	select ACPI_VIDEO if ACPI
 	select BACKLIGHT_CLASS_DEVICE if ACPI
 	select INPUT if ACPI
+	select X86_PLATFORM_DEVICES if ACPI
+	select ACPI_WMI if ACPI
 	help
 	  Say yes for an experimental 2D KMS framebuffer driver for the
 	  Intel GMA500 (Poulsbo), Intel GMA600 (Moorestown/Oak Trail) and
diff --git a/drivers/gpu/drm/i915/Kconfig b/drivers/gpu/drm/i915/Kconfig
index 7ae3b7d67fcf..3efce05d7b57 100644
--- a/drivers/gpu/drm/i915/Kconfig
+++ b/drivers/gpu/drm/i915/Kconfig
@@ -23,6 +23,8 @@ config DRM_I915
 	# but for select to work, need to select ACPI_VIDEO's dependencies, ick
 	select BACKLIGHT_CLASS_DEVICE if ACPI
 	select INPUT if ACPI
+	select X86_PLATFORM_DEVICES if ACPI
+	select ACPI_WMI if ACPI
 	select ACPI_VIDEO if ACPI
 	select ACPI_BUTTON if ACPI
 	select SYNC_FILE
diff --git a/include/acpi/video.h b/include/acpi/video.h
index 0625806d3bbd..91578e77ac4e 100644
--- a/include/acpi/video.h
+++ b/include/acpi/video.h
@@ -48,6 +48,7 @@ enum acpi_backlight_type {
 	acpi_backlight_video,
 	acpi_backlight_vendor,
 	acpi_backlight_native,
+	acpi_backlight_nvidia_wmi_ec,
 };
 
 #if IS_ENABLED(CONFIG_ACPI_VIDEO)
-- 
2.36.0


  parent reply	other threads:[~2022-07-12 19:48 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-12 19:38 [PATCH v2 00/29] drm/kms: Stop registering multiple /sys/class/backlight devs for a single display Hans de Goede
2022-07-12 19:38 ` [PATCH v2 01/29] ACPI: video: Add acpi_video_backlight_use_native() helper Hans de Goede
2022-07-21 21:24   ` Daniel Dadap
2022-07-21 21:30     ` Daniel Dadap
2022-08-02 11:31       ` Hans de Goede
2022-08-02 16:49         ` Daniel Dadap
2022-08-17 15:05           ` Hans de Goede
2022-08-17 20:18             ` Daniel Dadap
2022-08-24 11:08               ` Hans de Goede
2022-07-12 19:38 ` [PATCH v2 02/29] drm/i915: Don't register backlight when another backlight should be used Hans de Goede
2022-07-12 19:38 ` [PATCH v2 03/29] drm/amdgpu: " Hans de Goede
2022-07-20 16:44   ` Alex Deucher
2022-07-20 16:46     ` Alex Deucher
2022-08-17 13:05       ` Hans de Goede
2022-07-12 19:38 ` [PATCH v2 04/29] drm/radeon: " Hans de Goede
2022-07-20 16:45   ` Alex Deucher
2022-07-12 19:38 ` [PATCH v2 05/29] drm/nouveau: " Hans de Goede
2022-07-14 21:04   ` Lyude Paul
2022-07-12 19:38 ` [PATCH v2 06/29] ACPI: video: Drop backlight_device_get_by_type() call from acpi_video_get_backlight_type() Hans de Goede
2022-07-12 19:38 ` [PATCH v2 07/29] ACPI: video: Remove acpi_video_bus from list before tearing it down Hans de Goede
2022-07-12 19:38 ` [PATCH v2 08/29] ACPI: video: Simplify acpi_video_unregister_backlight() Hans de Goede
2022-07-12 19:38 ` [PATCH v2 09/29] ACPI: video: Make backlight class device registration a separate step Hans de Goede
2022-07-20 16:50   ` Alex Deucher
2022-07-12 19:38 ` [PATCH v2 10/29] ACPI: video: Remove code to unregister acpi_video backlight when a native backlight registers Hans de Goede
2022-07-12 19:38 ` [PATCH v2 11/29] drm/i915: Call acpi_video_register_backlight() (v2) Hans de Goede
2022-07-12 19:38 ` [PATCH v2 12/29] drm/nouveau: Register ACPI video backlight when nv_backlight registration fails Hans de Goede
2022-07-12 19:38 ` [PATCH v2 13/29] drm/amdgpu: Register ACPI video backlight when skipping amdgpu backlight registration Hans de Goede
2022-07-20 16:53   ` Alex Deucher
2022-07-12 19:38 ` [PATCH v2 14/29] drm/radeon: Register ACPI video backlight when skipping radeon " Hans de Goede
2022-07-20 16:54   ` Alex Deucher
2022-07-12 19:38 ` [PATCH v2 15/29] ACPI: video: Refactor acpi_video_get_backlight_type() a bit Hans de Goede
2022-07-12 19:38 ` Hans de Goede [this message]
2022-07-12 20:13   ` [PATCH v2 16/29] ACPI: video: Add Nvidia WMI EC brightness control detection Daniel Dadap
2022-07-15 11:59     ` Hans de Goede
2022-07-15 15:32       ` Daniel Dadap
2022-07-15 16:04         ` Hans de Goede
2022-08-17 12:22       ` Hans de Goede
2022-08-17 16:57         ` Daniel Dadap
2022-07-12 19:38 ` [PATCH v2 17/29] ACPI: video: Add Apple GMUX " Hans de Goede
2022-07-12 19:38 ` [PATCH v2 18/29] platform/x86: apple-gmux: Stop calling acpi/video.h functions Hans de Goede
2022-07-12 19:39 ` [PATCH v2 19/29] platform/x86: toshiba_acpi: Stop using acpi_video_set_dmi_backlight_type() Hans de Goede
2022-07-12 19:39 ` [PATCH v2 20/29] platform/x86: acer-wmi: Move backlight DMI quirks to acpi/video_detect.c Hans de Goede
2022-07-12 20:24   ` Daniel Dadap
2022-07-15 12:01     ` Hans de Goede
2022-07-12 19:39 ` [PATCH v2 21/29] platform/x86: asus-wmi: Drop DMI chassis-type check from backlight handling Hans de Goede
2022-07-12 19:39 ` [PATCH v2 22/29] platform/x86: asus-wmi: Move acpi_backlight=vendor quirks to ACPI video_detect.c Hans de Goede
2022-07-12 19:39 ` [PATCH v2 23/29] platform/x86: asus-wmi: Move acpi_backlight=native " Hans de Goede
2022-07-12 19:39 ` [PATCH v2 24/29] platform/x86: samsung-laptop: Move acpi_backlight=[vendor|native] " Hans de Goede
2022-07-12 19:39 ` [PATCH v2 25/29] ACPI: video: Remove acpi_video_set_dmi_backlight_type() Hans de Goede
2022-07-12 19:39 ` [PATCH v2 26/29] ACPI: video: Drop "Samsung X360" acpi_backlight=native quirk Hans de Goede
2022-07-12 19:39 ` [PATCH v2 27/29] ACPI: video: Drop Clevo/TUXEDO NL5xRU and NL5xNU acpi_backlight=native quirks Hans de Goede
2022-07-13 17:07   ` Werner Sembach
2022-07-13 17:21     ` Limonciello, Mario
2022-07-14 19:43       ` Hans de Goede
2022-07-12 19:39 ` [PATCH v2 28/29] ACPI: video: Fix indentation of video_detect_dmi_table[] entries Hans de Goede
2022-07-12 19:39 ` [PATCH v2 29/29] drm/todo: Add entry about dealing with brightness control on devices with > 1 panel Hans de Goede
2022-07-14 18:42 ` [PATCH v2 00/29] drm/kms: Stop registering multiple /sys/class/backlight devs for a single display Rafael J. Wysocki
2022-07-14 21:49 ` Lyude Paul

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220712193910.439171-17-hdegoede@redhat.com \
    --to=hdegoede@redhat.com \
    --cc=Pan@vger.kernel.org \
    --cc=Xinhui.Pan@amd.com \
    --cc=airlied@linux.ie \
    --cc=alexander.deucher@amd.com \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=andy@kernel.org \
    --cc=bskeggs@redhat.com \
    --cc=christian.koenig@amd.com \
    --cc=daniel@ffwll.ch \
    --cc=ddadap@nvidia.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jani.nikula@linux.intel.com \
    --cc=joonas.lahtinen@linux.intel.com \
    --cc=kherbst@redhat.com \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=lukas@wunner.de \
    --cc=lyude@redhat.com \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=markgross@kernel.org \
    --cc=mika.westerberg@linux.intel.com \
    --cc=mripard@kernel.org \
    --cc=nouveau@lists.freedesktop.org \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=rafael@kernel.org \
    --cc=rodrigo.vivi@intel.com \
    --cc=tvrtko.ursulin@linux.intel.com \
    --cc=tzimmermann@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).