OSDN Git Service

Input: max8925_onkey - switch to using managed resources
authorHimangi Saraogi <himangi774@gmail.com>
Thu, 29 May 2014 07:21:56 +0000 (00:21 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Thu, 29 May 2014 07:26:35 +0000 (00:26 -0700)
Let's switch the driver to use managed resources, this will simplify
error handling and driver unbinding logic.

Signed-off-by: Himangi Saraogi <himangi774@gmail.com>
Acked-by: Julia Lawall <julia.lawall@lip6.fr>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/misc/max8925_onkey.c

index eef41cf..3809618 100644 (file)
@@ -26,6 +26,7 @@
 #include <linux/interrupt.h>
 #include <linux/mfd/max8925.h>
 #include <linux/slab.h>
+#include <linux/device.h>
 
 #define SW_INPUT               (1 << 7)        /* 0/1 -- up/down */
 #define HARDRESET_EN           (1 << 7)
@@ -81,12 +82,14 @@ static int max8925_onkey_probe(struct platform_device *pdev)
                return -EINVAL;
        }
 
-       info = kzalloc(sizeof(struct max8925_onkey_info), GFP_KERNEL);
-       input = input_allocate_device();
-       if (!info || !input) {
-               error = -ENOMEM;
-               goto err_free_mem;
-       }
+       info = devm_kzalloc(&pdev->dev, sizeof(struct max8925_onkey_info),
+                           GFP_KERNEL);
+       if (!info)
+               return -ENOMEM;
+
+       input = devm_input_allocate_device(&pdev->dev);
+       if (!input)
+               return -ENOMEM;
 
        info->idev = input;
        info->i2c = chip->i2c;
@@ -100,55 +103,34 @@ static int max8925_onkey_probe(struct platform_device *pdev)
        input->dev.parent = &pdev->dev;
        input_set_capability(input, EV_KEY, KEY_POWER);
 
-       error = request_threaded_irq(irq[0], NULL, max8925_onkey_handler,
-                                    IRQF_ONESHOT, "onkey-down", info);
+       error = devm_request_threaded_irq(&pdev->dev, irq[0], NULL,
+                                         max8925_onkey_handler, IRQF_ONESHOT,
+                                         "onkey-down", info);
        if (error < 0) {
                dev_err(chip->dev, "Failed to request IRQ: #%d: %d\n",
                        irq[0], error);
-               goto err_free_mem;
+               return error;
        }
 
-       error = request_threaded_irq(irq[1], NULL, max8925_onkey_handler,
-                                    IRQF_ONESHOT, "onkey-up", info);
+       error = devm_request_threaded_irq(&pdev->dev, irq[1], NULL,
+                                         max8925_onkey_handler, IRQF_ONESHOT,
+                                         "onkey-up", info);
        if (error < 0) {
                dev_err(chip->dev, "Failed to request IRQ: #%d: %d\n",
                        irq[1], error);
-               goto err_free_irq0;
+               return error;
        }
 
        error = input_register_device(info->idev);
        if (error) {
                dev_err(chip->dev, "Can't register input device: %d\n", error);
-               goto err_free_irq1;
+               return error;
        }
 
        platform_set_drvdata(pdev, info);
        device_init_wakeup(&pdev->dev, 1);
 
        return 0;
-
-err_free_irq1:
-       free_irq(irq[1], info);
-err_free_irq0:
-       free_irq(irq[0], info);
-err_free_mem:
-       input_free_device(input);
-       kfree(info);
-
-       return error;
-}
-
-static int max8925_onkey_remove(struct platform_device *pdev)
-{
-       struct max8925_onkey_info *info = platform_get_drvdata(pdev);
-       struct max8925_chip *chip = dev_get_drvdata(pdev->dev.parent);
-
-       free_irq(info->irq[0] + chip->irq_base, info);
-       free_irq(info->irq[1] + chip->irq_base, info);
-       input_unregister_device(info->idev);
-       kfree(info);
-
-       return 0;
 }
 
 #ifdef CONFIG_PM_SLEEP
@@ -190,7 +172,6 @@ static struct platform_driver max8925_onkey_driver = {
                .pm     = &max8925_onkey_pm_ops,
        },
        .probe          = max8925_onkey_probe,
-       .remove         = max8925_onkey_remove,
 };
 module_platform_driver(max8925_onkey_driver);