Input: twl4030-pwrbutton - simplify driver using devm_*
authorSebastian Reichel <sre@debian.org>
Tue, 19 Nov 2013 21:56:18 +0000 (13:56 -0800)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Tue, 26 Nov 2013 02:28:10 +0000 (18:28 -0800)
Use managed irq resource to simplify the driver.

Signed-off-by: Sebastian Reichel <sre@debian.org>
Reviewed-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/misc/twl4030-pwrbutton.c

index 88522d003ffec1a86245a84ef98866e9f811d89f..fb3b63b2f85c3615619452ef9ee2e6f0528d8245 100644 (file)
@@ -58,7 +58,7 @@ static int twl4030_pwrbutton_probe(struct platform_device *pdev)
        int irq = platform_get_irq(pdev, 0);
        int err;
 
-       pwr = input_allocate_device();
+       pwr = devm_input_allocate_device(&pdev->dev);
        if (!pwr) {
                dev_err(&pdev->dev, "Can't allocate power button\n");
                return -ENOMEM;
@@ -70,39 +70,22 @@ static int twl4030_pwrbutton_probe(struct platform_device *pdev)
        pwr->phys = "twl4030_pwrbutton/input0";
        pwr->dev.parent = &pdev->dev;
 
-       err = request_threaded_irq(irq, NULL, powerbutton_irq,
+       err = devm_request_threaded_irq(&pwr->dev, irq, NULL, powerbutton_irq,
                        IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
                        "twl4030_pwrbutton", pwr);
        if (err < 0) {
                dev_err(&pdev->dev, "Can't get IRQ for pwrbutton: %d\n", err);
-               goto free_input_dev;
+               return err;
        }
 
        err = input_register_device(pwr);
        if (err) {
                dev_err(&pdev->dev, "Can't register power button: %d\n", err);
-               goto free_irq;
+               return err;
        }
 
        platform_set_drvdata(pdev, pwr);
 
-       return 0;
-
-free_irq:
-       free_irq(irq, pwr);
-free_input_dev:
-       input_free_device(pwr);
-       return err;
-}
-
-static int __exit twl4030_pwrbutton_remove(struct platform_device *pdev)
-{
-       struct input_dev *pwr = platform_get_drvdata(pdev);
-       int irq = platform_get_irq(pdev, 0);
-
-       free_irq(irq, pwr);
-       input_unregister_device(pwr);
-
        return 0;
 }
 
@@ -116,7 +99,6 @@ MODULE_DEVICE_TABLE(of, twl4030_pwrbutton_dt_match_table);
 
 static struct platform_driver twl4030_pwrbutton_driver = {
        .probe          = twl4030_pwrbutton_probe,
-       .remove         = __exit_p(twl4030_pwrbutton_remove),
        .driver         = {
                .name   = "twl4030_pwrbutton",
                .owner  = THIS_MODULE,