diff options
Diffstat (limited to 'drivers/platform/x86/fujitsu-laptop.c')
-rw-r--r-- | drivers/platform/x86/fujitsu-laptop.c | 66 |
1 files changed, 40 insertions, 26 deletions
diff --git a/drivers/platform/x86/fujitsu-laptop.c b/drivers/platform/x86/fujitsu-laptop.c index 9719c821d64f..421402a19bb9 100644 --- a/drivers/platform/x86/fujitsu-laptop.c +++ b/drivers/platform/x86/fujitsu-laptop.c @@ -765,6 +765,40 @@ static void acpi_fujitsu_bl_notify(struct acpi_device *device, u32 event) /* ACPI device for hotkey handling */ +static int fujitsu_laptop_platform_add(void) +{ + int ret; + + fujitsu_bl->pf_device = platform_device_alloc("fujitsu-laptop", -1); + if (!fujitsu_bl->pf_device) + return -ENOMEM; + + ret = platform_device_add(fujitsu_bl->pf_device); + if (ret) + goto err_put_platform_device; + + ret = sysfs_create_group(&fujitsu_bl->pf_device->dev.kobj, + &fujitsu_pf_attribute_group); + if (ret) + goto err_del_platform_device; + + return 0; + +err_del_platform_device: + platform_device_del(fujitsu_bl->pf_device); +err_put_platform_device: + platform_device_put(fujitsu_bl->pf_device); + + return ret; +} + +static void fujitsu_laptop_platform_remove(void) +{ + sysfs_remove_group(&fujitsu_bl->pf_device->dev.kobj, + &fujitsu_pf_attribute_group); + platform_device_unregister(fujitsu_bl->pf_device); +} + static int acpi_fujitsu_laptop_add(struct acpi_device *device) { int result = 0; @@ -1146,25 +1180,13 @@ static int __init fujitsu_init(void) /* Register platform stuff */ - fujitsu_bl->pf_device = platform_device_alloc("fujitsu-laptop", -1); - if (!fujitsu_bl->pf_device) { - ret = -ENOMEM; - goto err_unregister_acpi; - } - - ret = platform_device_add(fujitsu_bl->pf_device); - if (ret) - goto err_put_platform_device; - - ret = - sysfs_create_group(&fujitsu_bl->pf_device->dev.kobj, - &fujitsu_pf_attribute_group); + ret = fujitsu_laptop_platform_add(); if (ret) - goto err_del_platform_device; + goto err_unregister_acpi; ret = platform_driver_register(&fujitsu_pf_driver); if (ret) - goto err_remove_sysfs_group; + goto err_remove_platform_device; /* Register laptop driver */ @@ -1186,13 +1208,8 @@ err_free_fujitsu_laptop: kfree(fujitsu_laptop); err_unregister_platform_driver: platform_driver_unregister(&fujitsu_pf_driver); -err_remove_sysfs_group: - sysfs_remove_group(&fujitsu_bl->pf_device->dev.kobj, - &fujitsu_pf_attribute_group); -err_del_platform_device: - platform_device_del(fujitsu_bl->pf_device); -err_put_platform_device: - platform_device_put(fujitsu_bl->pf_device); +err_remove_platform_device: + fujitsu_laptop_platform_remove(); err_unregister_acpi: acpi_bus_unregister_driver(&acpi_fujitsu_bl_driver); err_free_fujitsu_bl: @@ -1209,10 +1226,7 @@ static void __exit fujitsu_cleanup(void) platform_driver_unregister(&fujitsu_pf_driver); - sysfs_remove_group(&fujitsu_bl->pf_device->dev.kobj, - &fujitsu_pf_attribute_group); - - platform_device_unregister(fujitsu_bl->pf_device); + fujitsu_laptop_platform_remove(); acpi_bus_unregister_driver(&acpi_fujitsu_bl_driver); |