aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Garrett <mjg59@srcf.ucam.org>2009-04-01 14:52:29 -0400
committerEric Anholt <eric@anholt.net>2009-04-17 16:31:07 -0400
commit3b1c1c1118880921da1188b7245e0470742802f8 (patch)
tree5802350a461aa87519f7a5ce8e1db431be8ec52f
parentd770e3cfe5a274a343d896b2cc1646af85646fbc (diff)
drm/i915: Unregister ACPI video driver when exiting
The i915 DRM triggers registration of the ACPI video driver on load. It should unregister it at unload in order to avoid generating backtraces on being reloaded. Signed-off-by: Matthew Garrett <mjg@redhat.com> Signed-off-by: Eric Anholt <eric@anholt.net>
-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