diff options
author | Michał Kępień <kernel@kempniu.pl> | 2017-03-14 13:26:29 +0300 |
---|---|---|
committer | Darren Hart (VMware) <dvhart@infradead.org> | 2017-03-23 19:03:23 +0300 |
commit | d811b511c18d9349a3880a4a7fff4c9c1169ac03 (patch) | |
tree | abde9782b1a2119a428e86e47394af612eafc79f /drivers/platform/x86/fujitsu-laptop.c | |
parent | b0c4b9c64e7ca4eaf39996429e98d97725d7098e (diff) | |
download | linux-d811b511c18d9349a3880a4a7fff4c9c1169ac03.tar.xz |
platform/x86: fujitsu-laptop: add and remove platform device in separate functions
Platform device handling adds a lot of complexity to fujitsu_init(),
which hinders its readability. Extract code responsible for adding and
removing the platform device to separate functions. Adjust whitespace
to make checkpatch happy.
Signed-off-by: Michał Kępień <kernel@kempniu.pl>
Tested-by: Jonathan Woithe <jwoithe@just42.net>
Reviewed-by: Jonathan Woithe <jwoithe@just42.net>
Signed-off-by: Darren Hart (VMware) <dvhart@infradead.org>
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); |