Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+22 −9
Original line number Original line Diff line number Diff line
@@ -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)
			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)


	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,