| From 77076c7aac0184cae2d8a358cf6e6ed1f195fe3f Mon Sep 17 00:00:00 2001 |
| From: Aaron Lu <aaron.lu@intel.com> |
| Date: Fri, 26 Sep 2014 10:30:08 +0800 |
| Subject: ACPI / i915: Update the condition to ignore firmware backlight change request |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Aaron Lu <aaron.lu@intel.com> |
| |
| commit 77076c7aac0184cae2d8a358cf6e6ed1f195fe3f upstream. |
| |
| Some of the Thinkpads' firmware will issue a backlight change request |
| through i915 operation region unconditionally on AC plug/unplug, the |
| backlight level used is arbitrary and thus should be ignored. This is |
| handled by commit 0b9f7d93ca61 (ACPI / i915: ignore firmware requests |
| for backlight change). Then there is a Dell laptop whose vendor backlight |
| interface also makes use of operation region to change backlight level |
| and with the above commit, that interface no long works. The condition |
| used to ignore the backlight change request from firmware is thus |
| changed to: if the vendor backlight interface is not in use and the ACPI |
| backlight interface is broken, we ignore the requests; oterwise, we keep |
| processing them. |
| |
| Fixes: 0b9f7d93ca61 (ACPI / i915: ignore firmware requests for backlight change) |
| Link: https://lkml.org/lkml/2014/9/23/854 |
| Reported-and-tested-by: Pali Rohár <pali.rohar@gmail.com> |
| Signed-off-by: Aaron Lu <aaron.lu@intel.com> |
| Acked-by: Daniel Vetter <daniel@ffwll.ch> |
| Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/gpu/drm/i915/intel_opregion.c | 16 +++++++++++----- |
| 1 file changed, 11 insertions(+), 5 deletions(-) |
| |
| --- a/drivers/gpu/drm/i915/intel_opregion.c |
| +++ b/drivers/gpu/drm/i915/intel_opregion.c |
| @@ -395,6 +395,16 @@ int intel_opregion_notify_adapter(struct |
| return -EINVAL; |
| } |
| |
| +/* |
| + * If the vendor backlight interface is not in use and ACPI backlight interface |
| + * is broken, do not bother processing backlight change requests from firmware. |
| + */ |
| +static bool should_ignore_backlight_request(void) |
| +{ |
| + return acpi_video_backlight_support() && |
| + !acpi_video_verify_backlight_support(); |
| +} |
| + |
| static u32 asle_set_backlight(struct drm_device *dev, u32 bclp) |
| { |
| struct drm_i915_private *dev_priv = dev->dev_private; |
| @@ -403,11 +413,7 @@ static u32 asle_set_backlight(struct drm |
| |
| DRM_DEBUG_DRIVER("bclp = 0x%08x\n", bclp); |
| |
| - /* |
| - * If the acpi_video interface is not supposed to be used, don't |
| - * bother processing backlight level change requests from firmware. |
| - */ |
| - if (!acpi_video_verify_backlight_support()) { |
| + if (should_ignore_backlight_request()) { |
| DRM_DEBUG_KMS("opregion backlight request ignored\n"); |
| return 0; |
| } |