diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_opregion.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_opregion.c | 15 |
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 | ||
411 | void intel_opregion_free(struct drm_device *dev) | 413 | void 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; |