Commit 4dca20efb1a9c2efefc28ad2867e5d6c3f5e1955
Committed by
Daniel Vetter
1 parent
7bd90909bb
Exists in
master
and in
20 other branches
drm/i915: panel: invert brightness via quirk
A machine may need to invert the panel backlight brightness value. This patch adds the infrastructure for a quirk to do so. Signed-off-by: Carsten Emde <C.Emde@osadl.org> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Showing 4 changed files with 32 additions and 10 deletions Side-by-side Diff
Documentation/kernel-parameters.txt
... | ... | @@ -967,14 +967,19 @@ |
967 | 967 | i8k.restricted [HW] Allow controlling fans only if SYS_ADMIN |
968 | 968 | capability is set. |
969 | 969 | |
970 | - i915.invert_brightness | |
970 | + i915.invert_brightness= | |
971 | 971 | [DRM] Invert the sense of the variable that is used to |
972 | 972 | set the brightness of the panel backlight. Normally a |
973 | - value of 0 indicates backlight switched off, and the | |
974 | - maximum value sets the backlight to maximum brightness. | |
975 | - If this parameter is specified, a value of 0 sets the | |
976 | - backlight to maximum brightness, and the maximum value | |
977 | - switches the backlight off. | |
973 | + brightness value of 0 indicates backlight switched off, | |
974 | + and the maximum of the brightness value sets the backlight | |
975 | + to maximum brightness. If this parameter is set to 0 | |
976 | + (default) and the machine requires it, or this parameter | |
977 | + is set to 1, a brightness value of 0 sets the backlight | |
978 | + to maximum brightness, and the maximum of the brightness | |
979 | + value switches the backlight off. | |
980 | + -1 -- never invert brightness | |
981 | + 0 -- machine default | |
982 | + 1 -- force brightness inversion | |
978 | 983 | |
979 | 984 | icn= [HW,ISDN] |
980 | 985 | Format: <io>[,<membase>[,<icn_id>[,<icn_id2>]]] |
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/intel_display.c
... | ... | @@ -9020,6 +9020,15 @@ |
9020 | 9020 | dev_priv->quirks |= QUIRK_LVDS_SSC_DISABLE; |
9021 | 9021 | } |
9022 | 9022 | |
9023 | +/* | |
9024 | + * A machine may need to invert the panel backlight brightness value | |
9025 | + */ | |
9026 | +static void quirk_invert_brightness(struct drm_device *dev) | |
9027 | +{ | |
9028 | + struct drm_i915_private *dev_priv = dev->dev_private; | |
9029 | + dev_priv->quirks |= QUIRK_INVERT_BRIGHTNESS; | |
9030 | +} | |
9031 | + | |
9023 | 9032 | struct intel_quirk { |
9024 | 9033 | int device; |
9025 | 9034 | int subsystem_vendor; |
drivers/gpu/drm/i915/intel_panel.c
... | ... | @@ -192,15 +192,22 @@ |
192 | 192 | return max; |
193 | 193 | } |
194 | 194 | |
195 | -static bool i915_panel_invert_brightness; | |
196 | -MODULE_PARM_DESC(invert_brightness, "Invert backlight brightness, please " | |
195 | +static int i915_panel_invert_brightness; | |
196 | +MODULE_PARM_DESC(invert_brightness, "Invert backlight brightness " | |
197 | + "(-1 force normal, 0 machine defaults, 1 force inversion), please " | |
197 | 198 | "report PCI device ID, subsystem vendor and subsystem device ID " |
198 | 199 | "to dri-devel@lists.freedesktop.org, if your machine needs it. " |
199 | 200 | "It will then be included in an upcoming module version."); |
200 | -module_param_named(invert_brightness, i915_panel_invert_brightness, bool, 0600); | |
201 | +module_param_named(invert_brightness, i915_panel_invert_brightness, int, 0600); | |
201 | 202 | static u32 intel_panel_compute_brightness(struct drm_device *dev, u32 val) |
202 | 203 | { |
203 | - if (i915_panel_invert_brightness) | |
204 | + struct drm_i915_private *dev_priv = dev->dev_private; | |
205 | + | |
206 | + if (i915_panel_invert_brightness < 0) | |
207 | + return val; | |
208 | + | |
209 | + if (i915_panel_invert_brightness > 0 || | |
210 | + dev_priv->quirks & QUIRK_INVERT_BRIGHTNESS) | |
204 | 211 | return intel_panel_get_max_backlight(dev) - val; |
205 | 212 | |
206 | 213 | return val; |