drm/i915: Skip .get_backlight() when backlight isn't enabled
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 7 Nov 2014 13:18:45 +0000 (15:18 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 14 Nov 2014 09:29:19 +0000 (10:29 +0100)
On VLV/CHV when the display is off, we can't read out the current
backlight level from the hardware since we have no pipe to do so.
Currently we end up reading a bigus register due to passing
INVALID_PIPE to VLV_BLC_PWM_CTL().

Skip the entire .get_backlight() call if the backlight isn't enabled
according to backlight.enabled.

This problem can be reproduced simply by reading the backlight device
actual_brightness file while the display is off.

Cc: Jani Nikula <jani.nikula@intel.com>
Suggested-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_panel.c

index ef646b139c4eb092c3d3a1cdc6d79e08240e4617..4ec6c2feef42cff59a011ae3d79d753e42b34bc9 100644 (file)
@@ -539,12 +539,15 @@ static u32 intel_panel_get_backlight(struct intel_connector *connector)
 {
        struct drm_device *dev = connector->base.dev;
        struct drm_i915_private *dev_priv = dev->dev_private;
-       u32 val;
+       struct intel_panel *panel = &connector->panel;
+       u32 val = 0;
 
        mutex_lock(&dev_priv->backlight_lock);
 
-       val = dev_priv->display.get_backlight(connector);
-       val = intel_panel_compute_brightness(connector, val);
+       if (panel->backlight.enabled) {
+               val = dev_priv->display.get_backlight(connector);
+               val = intel_panel_compute_brightness(connector, val);
+       }
 
        mutex_unlock(&dev_priv->backlight_lock);