Commit e506731c authored by Hans de Goede's avatar Hans de Goede Committed by Rafael J. Wysocki
Browse files

ACPI: video: Make acpi_backlight=video work independent from GPU driver



Commit 3dbc80a3 ("ACPI: video: Make backlight class device
registration a separate step (v2)") combined with
commit 5aa9d943 ("ACPI: video: Don't enable fallback path for
creating ACPI backlight by default")

Means that the video.ko code now fully depends on the GPU driver calling
acpi_video_register_backlight() for the acpi_video# backlight class
devices to get registered.

This means that if the GPU driver does not do this, acpi_backlight=video
on the cmdline, or DMI quirks for selecting acpi_video# will not work.

This is a problem on for example Apple iMac14,1 all-in-ones where
the monitor's LCD panel shows up as a regular DP connection instead of
eDP so the GPU driver will not call acpi_video_register_backlight() [1].

Fix this by making video.ko directly register the acpi_video# devices
when these have been explicitly requested either on the cmdline or
through DMI quirks (rather then auto-detection being used).

[1] GPU drivers only call acpi_video_register_backlight() when an internal
panel is detected, to avoid non working acpi_video# devices getting
registered on desktops which unfortunately is a real issue.

Fixes: 5aa9d943 ("ACPI: video: Don't enable fallback path for creating ACPI backlight by default")
Cc: All applicable <stable@vger.kernel.org>
Reviewed-by: default avatarMario Limonciello <mario.limonciello@amd.com>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 78dfc9d1
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -1984,6 +1984,7 @@ static int instance;
static int acpi_video_bus_add(struct acpi_device *device)
{
	struct acpi_video_bus *video;
	bool auto_detect;
	int error;
	acpi_status status;

@@ -2045,10 +2046,20 @@ static int acpi_video_bus_add(struct acpi_device *device)
	mutex_unlock(&video_list_lock);

	/*
	 * The userspace visible backlight_device gets registered separately
	 * from acpi_video_register_backlight().
	 * If backlight-type auto-detection is used then a native backlight may
	 * show up later and this may change the result from video to native.
	 * Therefor normally the userspace visible /sys/class/backlight device
	 * gets registered separately by the GPU driver calling
	 * acpi_video_register_backlight() when an internal panel is detected.
	 * Register the backlight now when not using auto-detection, so that
	 * when the kernel cmdline or DMI-quirks are used the backlight will
	 * get registered even if acpi_video_register_backlight() is not called.
	 */
	acpi_video_run_bcl_for_osi(video);
	if (__acpi_video_get_backlight_type(false, &auto_detect) == acpi_backlight_video &&
	    !auto_detect)
		acpi_video_bus_register_backlight(video);

	acpi_video_bus_add_notify_handler(video);

	return 0;