[Intel-gfx] [PATCH v7] drm/i915: A better backlight class brightness range.
Shih-Yuan Lee (FourDollars)
sylee at canonical.com
Thu Nov 12 19:50:29 PST 2015
Expose the whole valid PWM brightness range to the backlight class and respect
the VBT minimum backlight brightness.
Signed-off-by: Shih-Yuan Lee (FourDollars) <sylee at canonical.com>
---
drivers/gpu/drm/i915/intel_panel.c | 31 ++++++++++++++-----------------
1 file changed, 14 insertions(+), 17 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
index b05c6d9..73936581 100644
--- a/drivers/gpu/drm/i915/intel_panel.c
+++ b/drivers/gpu/drm/i915/intel_panel.c
@@ -1194,10 +1194,9 @@ static int intel_backlight_device_register(struct intel_connector *connector)
props.type = BACKLIGHT_RAW;
/*
- * Note: Everything should work even if the backlight device max
- * presented to the userspace is arbitrarily chosen.
+ * Expose the whole valid PWM brightness range to the backlight class.
*/
- props.max_brightness = panel->backlight.max;
+ props.max_brightness = panel->backlight.max - panel->backlight.min;
props.brightness = scale_hw_to_user(connector,
panel->backlight.level,
props.max_brightness);
@@ -1400,25 +1399,23 @@ static u32 get_backlight_min_vbt(struct intel_connector *connector)
struct drm_device *dev = connector->base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_panel *panel = &connector->panel;
- int min;
+ u32 min;
WARN_ON(panel->backlight.max == 0);
+ /* vbt value is a coefficient in range [0..255] */
+ min = scale(dev_priv->vbt.backlight.min_brightness, 0, 255,
+ 0, panel->backlight.max);
+
/*
- * XXX: If the vbt value is 255, it makes min equal to max, which leads
- * to problems. There are such machines out there. Either our
- * interpretation is wrong or the vbt has bogus data. Or both. Safeguard
- * against this by letting the minimum be at most (arbitrarily chosen)
- * 25% of the max.
+ * The backlight class brightness 0 is mapping to PWM 0 and it is used to
+ * turn off the backlight, so we need to step down a little bit here to make
+ * backlight class brightness 1 map to the real PWM min.
*/
- min = clamp_t(int, dev_priv->vbt.backlight.min_brightness, 0, 64);
- if (min != dev_priv->vbt.backlight.min_brightness) {
- DRM_DEBUG_KMS("clamping VBT min backlight %d/255 to %d/255\n",
- dev_priv->vbt.backlight.min_brightness, min);
- }
-
- /* vbt value is a coefficient in range [0..255] */
- return scale(min, 0, 255, 0, panel->backlight.max);
+ if (min > 0)
+ return min - 1;
+ else
+ return 0;
}
static int lpt_setup_backlight(struct intel_connector *connector, enum pipe unused)
--
1.9.1
More information about the Intel-gfx
mailing list