aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_opregion.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/i915_opregion.c')
-rw-r--r--drivers/gpu/drm/i915/i915_opregion.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/gpu/drm/i915/i915_opregion.c b/drivers/gpu/drm/i915/i915_opregion.c
index 69427722d20e..dc425e74a268 100644
--- a/drivers/gpu/drm/i915/i915_opregion.c
+++ b/drivers/gpu/drm/i915/i915_opregion.c
@@ -370,11 +370,8 @@ int intel_opregion_init(struct drm_device *dev, int resume)
370 if (mboxes & MBOX_ACPI) { 370 if (mboxes & MBOX_ACPI) {
371 DRM_DEBUG("Public ACPI methods supported\n"); 371 DRM_DEBUG("Public ACPI methods supported\n");
372 opregion->acpi = base + OPREGION_ACPI_OFFSET; 372 opregion->acpi = base + OPREGION_ACPI_OFFSET;
373 if (drm_core_check_feature(dev, DRIVER_MODESET)) { 373 if (drm_core_check_feature(dev, DRIVER_MODESET))
374 intel_didl_outputs(dev); 374 intel_didl_outputs(dev);
375 if (!resume)
376 acpi_video_register();
377 }
378 } else { 375 } else {
379 DRM_DEBUG("Public ACPI methods not supported\n"); 376 DRM_DEBUG("Public ACPI methods not supported\n");
380 err = -ENOTSUPP; 377 err = -ENOTSUPP;
@@ -389,8 +386,13 @@ int intel_opregion_init(struct drm_device *dev, int resume)
389 if (mboxes & MBOX_ASLE) { 386 if (mboxes & MBOX_ASLE) {
390 DRM_DEBUG("ASLE supported\n"); 387 DRM_DEBUG("ASLE supported\n");
391 opregion->asle = base + OPREGION_ASLE_OFFSET; 388 opregion->asle = base + OPREGION_ASLE_OFFSET;
389 opregion_enable_asle(dev);
392 } 390 }
393 391
392 if (!resume)
393 acpi_video_register();
394
395
394 /* Notify BIOS we are ready to handle ACPI video ext notifs. 396 /* Notify BIOS we are ready to handle ACPI video ext notifs.
395 * Right now, all the events are handled by the ACPI video module. 397 * Right now, all the events are handled by the ACPI video module.
396 * We don't actually need to do anything with them. */ 398 * We don't actually need to do anything with them. */
@@ -408,7 +410,7 @@ err_out:
408 return err; 410 return err;
409} 411}
410 412
411void intel_opregion_free(struct drm_device *dev) 413void intel_opregion_free(struct drm_device *dev, int suspend)
412{ 414{
413 struct drm_i915_private *dev_priv = dev->dev_private; 415 struct drm_i915_private *dev_priv = dev->dev_private;
414 struct intel_opregion *opregion = &dev_priv->opregion; 416 struct intel_opregion *opregion = &dev_priv->opregion;
@@ -416,6 +418,9 @@ void intel_opregion_free(struct drm_device *dev)
416 if (!opregion->enabled) 418 if (!opregion->enabled)
417 return; 419 return;
418 420
421 if (!suspend)
422 acpi_video_exit();
423
419 opregion->acpi->drdy = 0; 424 opregion->acpi->drdy = 0;
420 425
421 system_opregion = NULL; 426 system_opregion = NULL;