Commit b6b3ba5b authored by Jani Nikula's avatar Jani Nikula Committed by Daniel Vetter

drm/i915: keep backlight_level and backlight device brightness in sync

A single point of truth would be better than two, but achieving that would
require more abstractions for CONFIG_BACKLIGHT_CLASS_DEVICE=n with not a
whole lot of real benefits. Take the short route and just keep the
backlight levels in sync. In particular, update backlight device brightness
on opregion brightness changes.
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 73c352a2
...@@ -287,6 +287,9 @@ void intel_panel_set_backlight(struct drm_device *dev, u32 level) ...@@ -287,6 +287,9 @@ void intel_panel_set_backlight(struct drm_device *dev, u32 level)
struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_private *dev_priv = dev->dev_private;
dev_priv->backlight_level = level; dev_priv->backlight_level = level;
if (dev_priv->backlight)
dev_priv->backlight->props.brightness = level;
if (dev_priv->backlight_enabled) if (dev_priv->backlight_enabled)
intel_panel_actually_set_backlight(dev, level); intel_panel_actually_set_backlight(dev, level);
} }
...@@ -318,8 +321,12 @@ void intel_panel_enable_backlight(struct drm_device *dev, ...@@ -318,8 +321,12 @@ void intel_panel_enable_backlight(struct drm_device *dev,
{ {
struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_private *dev_priv = dev->dev_private;
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);
if (dev_priv->backlight)
dev_priv->backlight->props.brightness =
dev_priv->backlight_level;
}
dev_priv->backlight_enabled = true; dev_priv->backlight_enabled = true;
intel_panel_actually_set_backlight(dev, dev_priv->backlight_level); intel_panel_actually_set_backlight(dev, dev_priv->backlight_level);
...@@ -427,6 +434,7 @@ int intel_panel_setup_backlight(struct drm_connector *connector) ...@@ -427,6 +434,7 @@ int intel_panel_setup_backlight(struct drm_connector *connector)
memset(&props, 0, sizeof(props)); memset(&props, 0, sizeof(props));
props.type = BACKLIGHT_RAW; props.type = BACKLIGHT_RAW;
props.brightness = dev_priv->backlight_level;
props.max_brightness = _intel_panel_get_max_backlight(dev); props.max_brightness = _intel_panel_get_max_backlight(dev);
if (props.max_brightness == 0) { if (props.max_brightness == 0) {
DRM_DEBUG_DRIVER("Failed to get maximum backlight value\n"); DRM_DEBUG_DRIVER("Failed to get maximum backlight value\n");
...@@ -443,7 +451,6 @@ int intel_panel_setup_backlight(struct drm_connector *connector) ...@@ -443,7 +451,6 @@ int intel_panel_setup_backlight(struct drm_connector *connector)
dev_priv->backlight = NULL; dev_priv->backlight = NULL;
return -ENODEV; return -ENODEV;
} }
dev_priv->backlight->props.brightness = intel_panel_get_backlight(dev);
return 0; return 0;
} }
......
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