Commit 28dcc2d6 authored by Jani Nikula's avatar Jani Nikula Committed by Daniel Vetter

drm/i915: do not expose a dysfunctional backlight interface to userspace

Previously intel_panel_setup_backlight() would create a sysfs backlight
interface with max brightness of 1 if it was unable to figure out the max
backlight brightness. This rendered the backlight interface useless.

Do not create a dysfunctional backlight interface to begin with.
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
Tested-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent fcbc50da
...@@ -162,19 +162,12 @@ static u32 i915_read_blc_pwm_ctl(struct drm_i915_private *dev_priv) ...@@ -162,19 +162,12 @@ static u32 i915_read_blc_pwm_ctl(struct drm_i915_private *dev_priv)
return val; return val;
} }
u32 intel_panel_get_max_backlight(struct drm_device *dev) static u32 _intel_panel_get_max_backlight(struct drm_device *dev)
{ {
struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_private *dev_priv = dev->dev_private;
u32 max; u32 max;
max = i915_read_blc_pwm_ctl(dev_priv); max = i915_read_blc_pwm_ctl(dev_priv);
if (max == 0) {
/* XXX add code here to query mode clock or hardware clock
* and program max PWM appropriately.
*/
pr_warn_once("fixme: max PWM is zero\n");
return 1;
}
if (HAS_PCH_SPLIT(dev)) { if (HAS_PCH_SPLIT(dev)) {
max >>= 16; max >>= 16;
...@@ -188,6 +181,22 @@ u32 intel_panel_get_max_backlight(struct drm_device *dev) ...@@ -188,6 +181,22 @@ u32 intel_panel_get_max_backlight(struct drm_device *dev)
max *= 0xff; max *= 0xff;
} }
return max;
}
u32 intel_panel_get_max_backlight(struct drm_device *dev)
{
u32 max;
max = _intel_panel_get_max_backlight(dev);
if (max == 0) {
/* XXX add code here to query mode clock or hardware clock
* and program max PWM appropriately.
*/
pr_warn_once("fixme: max PWM is zero\n");
return 1;
}
DRM_DEBUG_DRIVER("max backlight PWM = %d\n", max); DRM_DEBUG_DRIVER("max backlight PWM = %d\n", max);
return max; return max;
} }
...@@ -424,7 +433,11 @@ int intel_panel_setup_backlight(struct drm_device *dev) ...@@ -424,7 +433,11 @@ int intel_panel_setup_backlight(struct drm_device *dev)
memset(&props, 0, sizeof(props)); memset(&props, 0, sizeof(props));
props.type = BACKLIGHT_RAW; props.type = BACKLIGHT_RAW;
props.max_brightness = intel_panel_get_max_backlight(dev); props.max_brightness = _intel_panel_get_max_backlight(dev);
if (props.max_brightness == 0) {
DRM_ERROR("Failed to get maximum backlight value\n");
return -ENODEV;
}
dev_priv->backlight = dev_priv->backlight =
backlight_device_register("intel_backlight", backlight_device_register("intel_backlight",
&connector->kdev, dev, &connector->kdev, 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