lkml.org 
[lkml]   [2014]   [Oct]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH] input: lm8323: Switch to using managed resources
Date
This change switches to using devm_* APIs to allocate  resources.
This helps to simplify failure path in probe function as well as
remove function.

Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: linux-input@vger.kernel.org
Signed-off-by: Pramod Gurav <pramod.gurav@smartplayin.com>
---
drivers/input/keyboard/lm8323.c | 39 ++++++++++++++++-----------------------
1 file changed, 16 insertions(+), 23 deletions(-)

diff --git a/drivers/input/keyboard/lm8323.c b/drivers/input/keyboard/lm8323.c
index cb32e2b..c4325a1 100644
--- a/drivers/input/keyboard/lm8323.c
+++ b/drivers/input/keyboard/lm8323.c
@@ -653,12 +653,10 @@ static int lm8323_probe(struct i2c_client *client,
return -EINVAL;
}

- lm = kzalloc(sizeof *lm, GFP_KERNEL);
- idev = input_allocate_device();
- if (!lm || !idev) {
- err = -ENOMEM;
- goto fail1;
- }
+ lm = devm_kzalloc(&client->dev, sizeof(*lm), GFP_KERNEL);
+ idev = devm_input_allocate_device(&client->dev);
+ if (!lm || !idev)
+ return -ENOMEM;

lm->client = client;
lm->idev = idev;
@@ -695,21 +693,20 @@ static int lm8323_probe(struct i2c_client *client,
/* If a true probe check the device */
if (lm8323_read_id(lm, data) != 0) {
dev_err(&client->dev, "device not found\n");
- err = -ENODEV;
- goto fail1;
+ return -ENODEV;
}

for (pwm = 0; pwm < LM8323_NUM_PWMS; pwm++) {
err = init_pwm(lm, pwm + 1, &client->dev,
pdata->pwm_names[pwm]);
if (err < 0)
- goto fail2;
+ goto fail1;
}

lm->kp_enabled = true;
err = device_create_file(&client->dev, &dev_attr_disable_kp);
if (err < 0)
- goto fail2;
+ goto fail1;

idev->name = pdata->name ? : "LM8323 keypad";
snprintf(lm->phys, sizeof(lm->phys),
@@ -730,14 +727,16 @@ static int lm8323_probe(struct i2c_client *client,
err = input_register_device(idev);
if (err) {
dev_dbg(&client->dev, "error registering input device\n");
- goto fail3;
+ goto fail2;
}

- err = request_threaded_irq(client->irq, NULL, lm8323_irq,
- IRQF_TRIGGER_LOW|IRQF_ONESHOT, "lm8323", lm);
+ err = devm_request_threaded_irq(&client->dev, client->irq, NULL,
+ lm8323_irq,
+ IRQF_TRIGGER_LOW | IRQF_ONESHOT,
+ "lm8323", lm);
if (err) {
dev_err(&client->dev, "could not get IRQ %d\n", client->irq);
- goto fail4;
+ goto fail3;
}

i2c_set_clientdata(client, lm);
@@ -747,18 +746,15 @@ static int lm8323_probe(struct i2c_client *client,

return 0;

-fail4:
+fail3:
input_unregister_device(idev);
idev = NULL;
-fail3:
- device_remove_file(&client->dev, &dev_attr_disable_kp);
fail2:
+ device_remove_file(&client->dev, &dev_attr_disable_kp);
+fail1:
while (--pwm >= 0)
if (lm->pwm[pwm].enabled)
led_classdev_unregister(&lm->pwm[pwm].cdev);
-fail1:
- input_free_device(idev);
- kfree(lm);
return err;
}

@@ -768,7 +764,6 @@ static int lm8323_remove(struct i2c_client *client)
int i;

disable_irq_wake(client->irq);
- free_irq(client->irq, lm);

input_unregister_device(lm->idev);

@@ -778,8 +773,6 @@ static int lm8323_remove(struct i2c_client *client)
if (lm->pwm[i].enabled)
led_classdev_unregister(&lm->pwm[i].cdev);

- kfree(lm);
-
return 0;
}

--
1.7.9.5


\
 
 \ /
  Last update: 2014-10-07 12:01    [W:0.263 / U:0.172 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site