Commit 22505b82 authored by Aaron Lu's avatar Aaron Lu Committed by Daniel Vetter

drm/i915: avoid brightness overflow when doing scale

Some card's max brightness level is pretty large, e.g. on Acer Aspire
4732Z, the max level is 989910. If user space set a large enough level
then the current scale done in intel_panel_set_backlight will cause an
integer overflow and the scaled level will be mistakenly small, leaving
user with an almost black screen. This patch fixes this problem.
Signed-off-by: default avatarAaron Lu <aaron.lu@intel.com>
[danvet: Add a comment to explain what's going on.]
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 9dbd8feb
...@@ -497,8 +497,11 @@ void intel_panel_set_backlight(struct drm_device *dev, u32 level, u32 max) ...@@ -497,8 +497,11 @@ void intel_panel_set_backlight(struct drm_device *dev, u32 level, u32 max)
goto out; goto out;
} }
/* scale to hardware */ /* scale to hardware, but be careful to not overflow */
level = level * freq / max; if (freq < max)
level = level * freq / max;
else
level = freq / max * level;
dev_priv->backlight.level = level; dev_priv->backlight.level = level;
if (dev_priv->backlight.device) if (dev_priv->backlight.device)
......
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