[PATCH 2/2] Input: da9055_onkey: convert to use devm_*

Subsystems: dialog semiconductor drivers, input (keyboard, mouse, joystick, touchscreen) drivers, the rest

STALE4381d

2 messages, 2 authors, 2014-08-08 · open the first message on its own page

[PATCH 2/2] Input: da9055_onkey: convert to use devm_*

From: Kiran Padwal <hidden>
Date: 2014-08-08 07:19:51

Converting to devm functions can make the code smaller and cleaner.

Signed-off-by: Kiran Padwal <redacted>
---
 drivers/input/misc/da9055_onkey.c |   22 ++++++----------------
 1 file changed, 6 insertions(+), 16 deletions(-)
diff --git a/drivers/input/misc/da9055_onkey.c b/drivers/input/misc/da9055_onkey.c
index ed6eaa9..1a1e760 100644
--- a/drivers/input/misc/da9055_onkey.c
+++ b/drivers/input/misc/da9055_onkey.c
@@ -90,9 +90,9 @@ static int da9055_onkey_probe(struct platform_device *pdev)
 	if (!onkey)
 		return -ENOMEM;
 
-	input_dev = input_allocate_device();
+	input_dev = devm_input_allocate_device(&pdev->dev);
 	if (!input_dev) {
-		dev_err(&pdev->dev, "Failed to allocate memory\n");
+		dev_err(&pdev->dev, "Failed to allocate input device\n");
 		return -ENOMEM;
 	}
 
@@ -107,43 +107,33 @@ static int da9055_onkey_probe(struct platform_device *pdev)
 
 	INIT_DELAYED_WORK(&onkey->work, da9055_onkey_work);
 
-	err = request_threaded_irq(irq, NULL, da9055_onkey_irq,
+	err = devm_request_threaded_irq(&pdev->dev, irq, NULL, da9055_onkey_irq,
 				   IRQF_TRIGGER_HIGH | IRQF_ONESHOT,
 				   "ONKEY", onkey);
 	if (err < 0) {
 		dev_err(&pdev->dev,
 			"Failed to register ONKEY IRQ %d, error = %d\n",
 			irq, err);
-		goto err_free_input;
+		return err;
 	}
 
 	err = input_register_device(input_dev);
 	if (err) {
 		dev_err(&pdev->dev, "Unable to register input device, %d\n",
 			err);
-		goto err_free_irq;
+		cancel_delayed_work_sync(&onkey->work);
+		return err;
 	}
 
 	platform_set_drvdata(pdev, onkey);
 
 	return 0;
-
-err_free_irq:
-	free_irq(irq, onkey);
-	cancel_delayed_work_sync(&onkey->work);
-err_free_input:
-	input_free_device(input_dev);
-
-	return err;
 }
 
 static int da9055_onkey_remove(struct platform_device *pdev)
 {
 	struct da9055_onkey *onkey = platform_get_drvdata(pdev);
-	int irq = platform_get_irq_byname(pdev, "ONKEY");
 
-	irq = regmap_irq_get_virq(onkey->da9055->irq_data, irq);
-	free_irq(irq, onkey);
 	cancel_delayed_work_sync(&onkey->work);
 	input_unregister_device(onkey->input);
 
-- 
1.7.9.5

Re: [PATCH 2/2] Input: da9055_onkey: convert to use devm_*

From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date: 2014-08-08 07:42:22

Hi Kiran,

On Fri, Aug 08, 2014 at 12:46:52PM +0530, Kiran Padwal wrote:
Converting to devm functions can make the code smaller and cleaner.
Unfortunately it also makes it incorrect. As presented this conversion
introduces race on driver removal. Before doing any more devm conversions
please try to spot it or ping me back in a couple of days if you'd like it
explained.

Thanks.

-- 
Dmitry
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help