From 3d670591b5e01b504d4c4477349608c473f2fa53 Mon Sep 17 00:00:00 2001 From: Lekensteyn Date: Tue, 26 Jun 2012 00:36:24 +0200 Subject: [PATCH] --- yaml --- r: 329483 b: refs/heads/master c: d627b62ff8d4d36761adbcd90ff143d79c94ab22 h: refs/heads/master i: 329481: d22c9c418af8f5f68a0403a63f1cf7ab2752d943 329479: f3a7d5a40003ea331b267378a17fb3ab2ea4b9bf v: v3 --- [refs] | 2 +- trunk/drivers/gpu/drm/i915/intel_opregion.c | 23 ++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 6a1a2b537ecc..544268adc323 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3739850b46f560a2be29287c3e5c29999d1a7e0e +refs/heads/master: d627b62ff8d4d36761adbcd90ff143d79c94ab22 diff --git a/trunk/drivers/gpu/drm/i915/intel_opregion.c b/trunk/drivers/gpu/drm/i915/intel_opregion.c index 18bd0af855dc..e27c17012628 100644 --- a/trunk/drivers/gpu/drm/i915/intel_opregion.c +++ b/trunk/drivers/gpu/drm/i915/intel_opregion.c @@ -427,6 +427,25 @@ static void intel_didl_outputs(struct drm_device *dev) 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.