Message ID | 5424CFB0.4080102@intel.com (mailing list archive) |
---|---|
State | Accepted, archived |
Headers | show |
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@gmail.com> > Cc: <stable@vger.kernel.org> # v3.16 and later > Signed-off-by: Aaron Lu <aaron.lu@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; > } >
On Fri, Sep 26, 2014 at 11:52:09PM +0200, Rafael J. Wysocki wrote: > 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@gmail.com> > > Cc: <stable@vger.kernel.org> # v3.16 and later > > Signed-off-by: Aaron Lu <aaron.lu@intel.com> > > Daniel, any objections? Nope, ack from my side. -Daniel > > > --- > > 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.
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; }
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@gmail.com> Cc: <stable@vger.kernel.org> # v3.16 and later Signed-off-by: Aaron Lu <aaron.lu@intel.com> --- drivers/gpu/drm/i915/intel_opregion.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-)