| From 13f3fbe827d09e3182023c8c54058cbf97aa146e Mon Sep 17 00:00:00 2001 |
| From: Jeremiah Mahler <jmmahler@gmail.com> |
| Date: Mon, 12 Jan 2015 11:01:03 -0800 |
| Subject: drm/i915: fix inconsistent brightness after resume |
| |
| From: Jeremiah Mahler <jmmahler@gmail.com> |
| |
| commit 13f3fbe827d09e3182023c8c54058cbf97aa146e upstream. |
| |
| commit 6dda730e55f412a6dfb181cae6784822ba463847 |
| Author: Jani Nikula <jani.nikula@intel.com> |
| Date: Tue Jun 24 18:27:40 2014 +0300 |
| |
| drm/i915: respect the VBT minimum backlight brightness |
| |
| introduced a bug which resulted in inconsistent brightness levels on |
| different machines. If a suspended was entered with the screen off some |
| machines would resume with the screen at minimum brightness and others |
| at maximum brightness. |
| |
| The following commands can be used to produce this behavior. |
| |
| xset dpms force off |
| sleep 1 |
| sudo systemctl suspend |
| (resume ...) |
| |
| The root cause of this problem is a comparison which checks to see if |
| the backlight level is zero when the panel is enabled. If it is zero, |
| it is set to the maximum level. Unfortunately, not all machines have a |
| minimum level of zero. On those machines the level is left at the |
| minimum instead of begin set to the maximum. |
| |
| Fix the bug by updating the comparison to check for the minimum |
| backlight level instead of zero. Also, expand the comparison for |
| the possible case when the level is less than the minimum. |
| |
| Fixes: 6dda730e55f4 ("respect the VBT minimum backlight brightness") |
| Signed-off-by: Jeremiah Mahler <jmmahler@gmail.com> |
| Signed-off-by: Jani Nikula <jani.nikula@intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/gpu/drm/i915/intel_panel.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/gpu/drm/i915/intel_panel.c |
| +++ b/drivers/gpu/drm/i915/intel_panel.c |
| @@ -947,7 +947,7 @@ void intel_panel_enable_backlight(struct |
| |
| WARN_ON(panel->backlight.max == 0); |
| |
| - if (panel->backlight.level == 0) { |
| + if (panel->backlight.level <= panel->backlight.min) { |
| panel->backlight.level = panel->backlight.max; |
| if (panel->backlight.device) |
| panel->backlight.device->props.brightness = |