Am Donnerstag, den 15.03.2012, 00:35 +0100 schrieb Carsten Emde:
Einfaches Textdokument-Anlage (drivers-gpu-drm-i915-invert-backlight-brightness.patch)
quilt also does not adapt the subject line of the message correctly to the one of the patch.
Following the documentation of the Legacy Backlight Brightness (LBB) Register in the configuration space of some Intel PCI graphics adapters, setting the LBB register with the value 0x0 causes the backlight to be turned off, and 0xFF causes the backlight to be set to 100% intensity (http://download.intel.com/embedded/processors/Whitepaper/324567.pdf). At least one of our test systems, however, turns the backlight off at 0xFF and sets it to maximum intensity at 0. In consequence, the screen of this systems becomes dark at an early boot stage which makes it unusable. The same inversion applies to the BLC_PWM_CTL I915 register. This problem was introduced in kernel version 2.6.38 when the PCI device of this system was first supported by the i915 KMS module.
This patch adds a module parameter to invert the backlight brightness value before writing and after reading which makes the affected notebook usable again.
Signed-off-by: Carsten Emde C.Emde@osadl.org
Documentation/kernel-parameters.txt | 9 +++++++++ drivers/gpu/drm/i915/intel_panel.c | 14 ++++++++++++++ 2 files changed, 23 insertions(+)
Index: linux-3.3-rc6/Documentation/kernel-parameters.txt
--- linux-3.3-rc6.orig/Documentation/kernel-parameters.txt +++ linux-3.3-rc6/Documentation/kernel-parameters.txt @@ -966,6 +966,15 @@ bytes respectively. Such letter suffixes
i810= [HW,DRM]
- i915.invert_brightness
[DRM] Invert the sense of the variable that is used to
set the brightness of the panel backlight. Normally a
value of 0 indicates backlight switched off, and the
maximum value sets the backlight to maximum brightness.
If this parameter is specified, a value of 0 sets the
backlight to maximum brightness, and the maximum value
switches the backlight off.
- i8k.ignore_dmi [HW] Continue probing hardware even if DMI data indicates that the driver is running on unsupported hardware.
Index: linux-3.3-rc6/drivers/gpu/drm/i915/intel_panel.c
--- linux-3.3-rc6.orig/drivers/gpu/drm/i915/intel_panel.c +++ linux-3.3-rc6/drivers/gpu/drm/i915/intel_panel.c @@ -28,6 +28,7 @@
Chris Wilson <chris@chris-wilson.co.uk>
*/
+#include <linux/moduleparam.h> #include "intel_drv.h"
#define PCI_LBPC 0xf4 /* legacy/combination backlight modes */ @@ -191,6 +192,10 @@ u32 intel_panel_get_max_backlight(struct return max; }
+static bool brightness_inverted; +MODULE_PARM_DESC(brightness_inverted, "Backlight brightness value is inverted "
- "(0 = max brightness, max value = dark)");
Could you elaborate somewhere for example by giving an example what `dark` means? As a normal user it is not clear to me.
+module_param_named(brightness_inverted, brightness_inverted, bool, 0600); u32 intel_panel_get_backlight(struct drm_device *dev) { struct drm_i915_private *dev_priv = dev->dev_private; @@ -212,6 +217,10 @@ u32 intel_panel_get_backlight(struct drm }
DRM_DEBUG_DRIVER("get backlight PWM = %d\n", val);
- if (brightness_inverted) {
u32 max = intel_panel_get_max_backlight(dev);
val = max - val;
- } return val;
}
@@ -229,6 +238,11 @@ static void intel_panel_actually_set_bac
DRM_DEBUG_DRIVER("set backlight PWM = %d\n", level);
- if (brightness_inverted) {
u32 max = intel_panel_get_max_backlight(dev);
level = max - level;
- }
- if (HAS_PCH_SPLIT(dev)) return intel_pch_panel_set_backlight(dev, level);
Thanks,
Paul