Commit efaa14c7 authored by Aaron Lu's avatar Aaron Lu Committed by Rafael J. Wysocki

ACPI / video: no automatic brightness changes by win8-compatible firmware

Starting from win8, MS backlight control driver will set bit 2 of the
parameter of control method _DOS, to inform firmware it should not
perform any automatic brightness changes. This mostly affects hotkey
notification deliver - if we do not set this bit, on hotkey press,
firmware may choose to adjust brightness level instead of sending out
notification and doing nothing.

So this patch sets bit 2 when calling _DOS so that GUIs can show the
notification window on hotkey press.  This behavior change is only
necessary for win8 systems.

The MS document on win8 backlight control is here:
http://msdn.microsoft.com/en-US/library/windows/hardware/jj159305

References: https://bugzilla.kernel.org/show_bug.cgi?id=52951
References: https://bugzilla.kernel.org/show_bug.cgi?id=56711Reported-by: default avatarMicael Dias <kam1kaz3@gmail.com>
Reported-by: default avatarDan Garton <dan.garton@gmail.com>
Reported-by: default avatarBob Ziuchkovski <bob.ziuchkovski@gmail.com>
Signed-off-by: default avatarAaron Lu <aaron.lu@intel.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 8c5bd7ad
...@@ -1539,14 +1539,20 @@ static int acpi_video_bus_put_devices(struct acpi_video_bus *video) ...@@ -1539,14 +1539,20 @@ static int acpi_video_bus_put_devices(struct acpi_video_bus *video)
/* acpi_video interface */ /* acpi_video interface */
/*
* Win8 requires setting bit2 of _DOS to let firmware know it shouldn't
* preform any automatic brightness change on receiving a notification.
*/
static int acpi_video_bus_start_devices(struct acpi_video_bus *video) static int acpi_video_bus_start_devices(struct acpi_video_bus *video)
{ {
return acpi_video_bus_DOS(video, 0, 0); return acpi_video_bus_DOS(video, 0,
acpi_video_backlight_quirks() ? 1 : 0);
} }
static int acpi_video_bus_stop_devices(struct acpi_video_bus *video) static int acpi_video_bus_stop_devices(struct acpi_video_bus *video)
{ {
return acpi_video_bus_DOS(video, 0, 1); return acpi_video_bus_DOS(video, 0,
acpi_video_backlight_quirks() ? 0 : 1);
} }
static void acpi_video_bus_notify(struct acpi_device *device, u32 event) static void acpi_video_bus_notify(struct acpi_device *device, u32 event)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment