Commit cf0a6584 authored by Daniel Vetter's avatar Daniel Vetter

drm/i915: write backlight harder

770c1231 is the first bad commit
commit 770c1231
Author: Takashi Iwai <tiwai@suse.de>
Date:   Sat Aug 11 08:56:42 2012 +0200

    drm/i915: Fix blank panel at reopening lid

changed the register write sequence for restoring the backlight, which
helped prevent non-working backlights on some machines. Turns out that
the original sequence was the right thing to do for a different set of
machines. Worse, setting the backlight level _after_ enabling it seems
to reset it somehow. So we need to make that one conditional upon the
backlight having been reset to zero, and add the old one back.

Cargo-culting at it's best, but it seems to work.

Cc: stable@vger.kernel.org
Cc: Takashi Iwai <tiwai@suse.de>
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=47941Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
Acked-by: default avatarTakashi Iwai <tiwai@suse.de>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent b8efb17b
...@@ -321,6 +321,9 @@ void intel_panel_enable_backlight(struct drm_device *dev, ...@@ -321,6 +321,9 @@ void intel_panel_enable_backlight(struct drm_device *dev,
if (dev_priv->backlight_level == 0) if (dev_priv->backlight_level == 0)
dev_priv->backlight_level = intel_panel_get_max_backlight(dev); dev_priv->backlight_level = intel_panel_get_max_backlight(dev);
dev_priv->backlight_enabled = true;
intel_panel_actually_set_backlight(dev, dev_priv->backlight_level);
if (INTEL_INFO(dev)->gen >= 4) { if (INTEL_INFO(dev)->gen >= 4) {
uint32_t reg, tmp; uint32_t reg, tmp;
...@@ -356,12 +359,12 @@ void intel_panel_enable_backlight(struct drm_device *dev, ...@@ -356,12 +359,12 @@ void intel_panel_enable_backlight(struct drm_device *dev,
} }
set_level: set_level:
/* Call below after setting BLC_PWM_CPU_CTL2 and BLC_PWM_PCH_CTL1. /* Check the current backlight level and try to set again if it's zero.
* BLC_PWM_CPU_CTL may be cleared to zero automatically when these * On some machines, BLC_PWM_CPU_CTL is cleared to zero automatically
* registers are set. * when BLC_PWM_CPU_CTL2 and BLC_PWM_PCH_CTL1 are written.
*/ */
dev_priv->backlight_enabled = true; if (!intel_panel_get_backlight(dev))
intel_panel_actually_set_backlight(dev, dev_priv->backlight_level); intel_panel_actually_set_backlight(dev, dev_priv->backlight_level);
} }
static void intel_panel_init_backlight(struct drm_device *dev) static void intel_panel_init_backlight(struct drm_device *dev)
......
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