]> git.openfabrics.org - ~emulex/infiniband.git/commitdiff
eeepc-laptop: move platform driver registration out of eeepc_hotk_add()
authorAlan Jenkins <alan-jenkins@tuffmail.co.uk>
Thu, 3 Dec 2009 07:45:05 +0000 (07:45 +0000)
committerLen Brown <len.brown@intel.com>
Wed, 9 Dec 2009 20:54:32 +0000 (15:54 -0500)
Strictly speaking we should register the platform driver exactly once,
whether there are zero, one, or multiple matching acpi devices.

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
Signed-off-by: Len Brown <len.brown@intel.com>
drivers/platform/x86/eeepc-laptop.c

index b4eacb68a19d1d6e9fc58153d42483ea74942859..3f9b286b854eb6025dd9e59856ca36fc14558948 100644 (file)
@@ -1276,13 +1276,10 @@ static int __devinit eeepc_hotk_add(struct acpi_device *device)
 
        result = eeepc_hotk_init();
        if (result)
-               goto fail_platform_driver;
+               goto fail_platform_device1;
        eeepc_enable_camera();
 
        /* Register platform stuff */
-       result = platform_driver_register(&platform_driver);
-       if (result)
-               goto fail_platform_driver;
        platform_device = platform_device_alloc(EEEPC_HOTK_FILE, -1);
        if (!platform_device) {
                result = -ENOMEM;
@@ -1340,8 +1337,6 @@ fail_sysfs:
 fail_platform_device2:
        platform_device_put(platform_device);
 fail_platform_device1:
-       platform_driver_unregister(&platform_driver);
-fail_platform_driver:
        kfree(ehotk);
 
        return result;
@@ -1357,7 +1352,6 @@ static int eeepc_hotk_remove(struct acpi_device *device, int type)
        sysfs_remove_group(&platform_device->dev.kobj,
                           &platform_attribute_group);
        platform_device_unregister(platform_device);
-       platform_driver_unregister(&platform_driver);
 
        kfree(ehotk);
        return 0;
@@ -1367,19 +1361,30 @@ static int __init eeepc_laptop_init(void)
 {
        int result;
 
-       result = acpi_bus_register_driver(&eeepc_hotk_driver);
+       result = platform_driver_register(&platform_driver);
        if (result < 0)
                return result;
+
+       result = acpi_bus_register_driver(&eeepc_hotk_driver);
+       if (result < 0)
+               goto fail_acpi_driver;
        if (!ehotk) {
-               acpi_bus_unregister_driver(&eeepc_hotk_driver);
-               return -ENODEV;
+               result = -ENODEV;
+               goto fail_no_device;
        }
        return 0;
+
+fail_no_device:
+       acpi_bus_unregister_driver(&eeepc_hotk_driver);
+fail_acpi_driver:
+       platform_driver_unregister(&platform_driver);
+       return result;
 }
 
 static void __exit eeepc_laptop_exit(void)
 {
        acpi_bus_unregister_driver(&eeepc_hotk_driver);
+       platform_driver_unregister(&platform_driver);
 }
 
 module_init(eeepc_laptop_init);