diff --git a/debian/changelog b/debian/changelog index 61c0f1327..61d36a670 100644 --- a/debian/changelog +++ b/debian/changelog @@ -71,6 +71,7 @@ linux (3.2.40-1) UNRELEASED; urgency=low * kmsg_dump: Only dump kernel log in error cases (Closes: #703386) - kexec: remove KMSG_DUMP_KEXEC - kmsg_dump: don't run on non-error paths by default + * [x86] i915: initialize CADL in opregion (Closes: #703271) -- Ben Hutchings Wed, 27 Feb 2013 03:48:30 +0000 diff --git a/debian/patches/bugfix/all/i915-initialize-CADL-in-opregion.patch b/debian/patches/bugfix/all/i915-initialize-CADL-in-opregion.patch new file mode 100644 index 000000000..91d1dab46 --- /dev/null +++ b/debian/patches/bugfix/all/i915-initialize-CADL-in-opregion.patch @@ -0,0 +1,66 @@ +From: Lekensteyn +Date: Tue, 26 Jun 2012 00:36:24 +0200 +Subject: i915: initialize CADL in opregion + +commit d627b62ff8d4d36761adbcd90ff143d79c94ab22 upstream. + +This is rather a hack to fix brightness hotkeys on a Clevo laptop. CADL is not +used anywhere in the driver code at the moment, but it could be used in BIOS as +is the case with the Clevo laptop. + +The Clevo B7130 requires the CADL field to contain at least the ID of +the LCD device. If this field is empty, the ACPI methods that are called +on pressing brightness / display switching hotkeys will not trigger a +notification. As a result, it appears as no hotkey has been pressed. + +Reference: https://bugs.freedesktop.org/show_bug.cgi?id=45452 +Tested-by: Peter Wu +Signed-off-by: Peter Wu +Acked-by: Jesse Barnes +Signed-off-by: Daniel Vetter +--- + drivers/gpu/drm/i915/intel_opregion.c | 23 ++++++++++++++++++++++- + 1 file changed, 22 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/i915/intel_opregion.c b/drivers/gpu/drm/i915/intel_opregion.c +index 18bd0af..e27c170 100644 +--- a/drivers/gpu/drm/i915/intel_opregion.c ++++ b/drivers/gpu/drm/i915/intel_opregion.c +@@ -427,6 +427,25 @@ blind_set: + goto end; + } + ++static void intel_setup_cadls(struct drm_device *dev) ++{ ++ struct drm_i915_private *dev_priv = dev->dev_private; ++ struct intel_opregion *opregion = &dev_priv->opregion; ++ int i = 0; ++ u32 disp_id; ++ ++ /* Initialize the CADL field by duplicating the DIDL values. ++ * Technically, this is not always correct as display outputs may exist, ++ * but not active. This initialization is necessary for some Clevo ++ * laptops that check this field before processing the brightness and ++ * display switching hotkeys. Just like DIDL, CADL is NULL-terminated if ++ * there are less than eight devices. */ ++ do { ++ disp_id = ioread32(&opregion->acpi->didl[i]); ++ iowrite32(disp_id, &opregion->acpi->cadl[i]); ++ } while (++i < 8 && disp_id != 0); ++} ++ + void intel_opregion_init(struct drm_device *dev) + { + struct drm_i915_private *dev_priv = dev->dev_private; +@@ -436,8 +455,10 @@ void intel_opregion_init(struct drm_device *dev) + return; + + if (opregion->acpi) { +- if (drm_core_check_feature(dev, DRIVER_MODESET)) ++ if (drm_core_check_feature(dev, DRIVER_MODESET)) { + intel_didl_outputs(dev); ++ intel_setup_cadls(dev); ++ } + + /* Notify BIOS we are ready to handle ACPI video ext notifs. + * Right now, all the events are handled by the ACPI video module. diff --git a/debian/patches/series b/debian/patches/series index 5f2d312df..493775128 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -618,3 +618,4 @@ bugfix/x86/drm-i915-Unconditionally-initialise-the-interrupt-wo.patch debian/efi-autoload-efivars.patch bugfix/all/kexec-remove-KMSG_DUMP_KEXEC.patch bugfix/all/kmsg_dump-don-t-run-on-non-error-paths-by-default.patch +bugfix/all/i915-initialize-CADL-in-opregion.patch