|
@@ -24,6 +24,7 @@
|
|
|
#include <linux/io.h>
|
|
|
#include <linux/pci.h>
|
|
|
#include <linux/acpi.h>
|
|
|
+#include <linux/atomic.h>
|
|
|
|
|
|
static struct backlight_device *apple_backlight_device;
|
|
|
|
|
@@ -221,14 +222,32 @@ static struct acpi_driver apple_bl_driver = {
|
|
|
},
|
|
|
};
|
|
|
|
|
|
+static atomic_t apple_bl_registered = ATOMIC_INIT(0);
|
|
|
+
|
|
|
+int apple_bl_register(void)
|
|
|
+{
|
|
|
+ if (atomic_xchg(&apple_bl_registered, 1) == 0)
|
|
|
+ return acpi_bus_register_driver(&apple_bl_driver);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(apple_bl_register);
|
|
|
+
|
|
|
+void apple_bl_unregister(void)
|
|
|
+{
|
|
|
+ if (atomic_xchg(&apple_bl_registered, 0) == 1)
|
|
|
+ acpi_bus_unregister_driver(&apple_bl_driver);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(apple_bl_unregister);
|
|
|
+
|
|
|
static int __init apple_bl_init(void)
|
|
|
{
|
|
|
- return acpi_bus_register_driver(&apple_bl_driver);
|
|
|
+ return apple_bl_register();
|
|
|
}
|
|
|
|
|
|
static void __exit apple_bl_exit(void)
|
|
|
{
|
|
|
- acpi_bus_unregister_driver(&apple_bl_driver);
|
|
|
+ apple_bl_unregister();
|
|
|
}
|
|
|
|
|
|
module_init(apple_bl_init);
|