aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/acpi/video.c3
-rw-r--r--drivers/gpu/drm/i915/i915_dma.c2
-rw-r--r--drivers/gpu/drm/i915/i915_drv.c2
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h4
-rw-r--r--drivers/gpu/drm/i915/i915_opregion.c5
-rw-r--r--include/acpi/video.h2
6 files changed, 12 insertions, 6 deletions
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
index cd4fb7543a90..8961e613e093 100644
--- a/drivers/acpi/video.c
+++ b/drivers/acpi/video.c
@@ -2293,7 +2293,7 @@ static int __init acpi_video_init(void)
2293 return acpi_video_register(); 2293 return acpi_video_register();
2294} 2294}
2295 2295
2296static void __exit acpi_video_exit(void) 2296void __exit acpi_video_exit(void)
2297{ 2297{
2298 2298
2299 acpi_bus_unregister_driver(&acpi_video_bus); 2299 acpi_bus_unregister_driver(&acpi_video_bus);
@@ -2302,6 +2302,7 @@ static void __exit acpi_video_exit(void)
2302 2302
2303 return; 2303 return;
2304} 2304}
2305EXPORT_SYMBOL(acpi_video_exit);
2305 2306
2306module_init(acpi_video_init); 2307module_init(acpi_video_init);
2307module_exit(acpi_video_exit); 2308module_exit(acpi_video_exit);
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index a000cf028826..272614389c02 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -1232,7 +1232,7 @@ int i915_driver_unload(struct drm_device *dev)
1232 if (dev_priv->regs != NULL) 1232 if (dev_priv->regs != NULL)
1233 iounmap(dev_priv->regs); 1233 iounmap(dev_priv->regs);
1234 1234
1235 intel_opregion_free(dev); 1235 intel_opregion_free(dev, 0);
1236 1236
1237 if (drm_core_check_feature(dev, DRIVER_MODESET)) { 1237 if (drm_core_check_feature(dev, DRIVER_MODESET)) {
1238 intel_modeset_cleanup(dev); 1238 intel_modeset_cleanup(dev);
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 6503e2210f65..98560e1e899a 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -77,7 +77,7 @@ static int i915_suspend(struct drm_device *dev, pm_message_t state)
77 drm_irq_uninstall(dev); 77 drm_irq_uninstall(dev);
78 } 78 }
79 79
80 intel_opregion_free(dev); 80 intel_opregion_free(dev, 1);
81 81
82 if (state.event == PM_EVENT_SUSPEND) { 82 if (state.event == PM_EVENT_SUSPEND) {
83 /* Shut down the device */ 83 /* Shut down the device */
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 473a8f7fbdb5..d7471fe1beb1 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -674,12 +674,12 @@ extern int i915_restore_state(struct drm_device *dev);
674#ifdef CONFIG_ACPI 674#ifdef CONFIG_ACPI
675/* i915_opregion.c */ 675/* i915_opregion.c */
676extern int intel_opregion_init(struct drm_device *dev, int resume); 676extern int intel_opregion_init(struct drm_device *dev, int resume);
677extern void intel_opregion_free(struct drm_device *dev); 677extern void intel_opregion_free(struct drm_device *dev, int suspend);
678extern void opregion_asle_intr(struct drm_device *dev); 678extern void opregion_asle_intr(struct drm_device *dev);
679extern void opregion_enable_asle(struct drm_device *dev); 679extern void opregion_enable_asle(struct drm_device *dev);
680#else 680#else
681static inline int intel_opregion_init(struct drm_device *dev, int resume) { return 0; } 681static inline int intel_opregion_init(struct drm_device *dev, int resume) { return 0; }
682static inline void intel_opregion_free(struct drm_device *dev) { return; } 682static inline void intel_opregion_free(struct drm_device *dev, int suspend) { return; }
683static inline void opregion_asle_intr(struct drm_device *dev) { return; } 683static inline void opregion_asle_intr(struct drm_device *dev) { return; }
684static inline void opregion_enable_asle(struct drm_device *dev) { return; } 684static inline void opregion_enable_asle(struct drm_device *dev) { return; }
685#endif 685#endif
diff --git a/drivers/gpu/drm/i915/i915_opregion.c b/drivers/gpu/drm/i915/i915_opregion.c
index 8dc1fd3115c2..3eceefe3475f 100644
--- a/drivers/gpu/drm/i915/i915_opregion.c
+++ b/drivers/gpu/drm/i915/i915_opregion.c
@@ -409,7 +409,7 @@ err_out:
409 return err; 409 return err;
410} 410}
411 411
412void intel_opregion_free(struct drm_device *dev) 412void intel_opregion_free(struct drm_device *dev, int suspend)
413{ 413{
414 struct drm_i915_private *dev_priv = dev->dev_private; 414 struct drm_i915_private *dev_priv = dev->dev_private;
415 struct intel_opregion *opregion = &dev_priv->opregion; 415 struct intel_opregion *opregion = &dev_priv->opregion;
@@ -417,6 +417,9 @@ void intel_opregion_free(struct drm_device *dev)
417 if (!opregion->enabled) 417 if (!opregion->enabled)
418 return; 418 return;
419 419
420 if (!suspend)
421 acpi_video_exit();
422
420 opregion->acpi->drdy = 0; 423 opregion->acpi->drdy = 0;
421 424
422 system_opregion = NULL; 425 system_opregion = NULL;
diff --git a/include/acpi/video.h b/include/acpi/video.h
index f0275bb79ce4..af6fe95fd3d0 100644
--- a/include/acpi/video.h
+++ b/include/acpi/video.h
@@ -3,8 +3,10 @@
3 3
4#if (defined CONFIG_ACPI_VIDEO || defined CONFIG_ACPI_VIDEO_MODULE) 4#if (defined CONFIG_ACPI_VIDEO || defined CONFIG_ACPI_VIDEO_MODULE)
5extern int acpi_video_register(void); 5extern int acpi_video_register(void);
6extern int acpi_video_exit(void);
6#else 7#else
7static inline int acpi_video_register(void) { return 0; } 8static inline int acpi_video_register(void) { return 0; }
9static inline void acpi_video_exit(void) { return; }
8#endif 10#endif
9 11
10#endif 12#endif