On Friday, September 26, 2014 10:30:08 AM Aaron Lu wrote:
> 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.
> 
> Reference: https://lkml.org/lkml/2014/9/23/854
> Reported-and-tested-by: Pali Roh?r <pali.rohar at gmail.com>
> Cc: <stable at vger.kernel.org> # v3.16 and later
> Signed-off-by: Aaron Lu <aaron.lu at intel.com>

Daniel, any objections?

> ---
>  drivers/gpu/drm/i915/intel_opregion.c | 16 +++++++++++-----
>  1 file changed, 11 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_opregion.c 
> b/drivers/gpu/drm/i915/intel_opregion.c
> index ca52ad2ae7d1..d8de1d5140a7 100644
> --- a/drivers/gpu/drm/i915/intel_opregion.c
> +++ b/drivers/gpu/drm/i915/intel_opregion.c
> @@ -396,6 +396,16 @@ int intel_opregion_notify_adapter(struct drm_device 
> *dev, pci_power_t state)
>       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;
> @@ -404,11 +414,7 @@ static u32 asle_set_backlight(struct drm_device *dev, 
> u32 bclp)
>  
>       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;
>       }
> 

-- 
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.

Reply via email to