diff options
author | Sachin Kamat <sachin.kamat@linaro.org> | 2013-04-29 19:20:31 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-04-29 21:28:36 -0400 |
commit | 66714612783525bf3fd389f886822d89d1be2cbf (patch) | |
tree | 13484175aa805a93ee64135985086710128eb19b /drivers/rtc | |
parent | d1a9663964d3520435f887ba6a15b98d8a6ac312 (diff) |
drivers/rtc/rtc-ds3232.c: use devm_* APIs
devm_* functions are device managed and make cleanup code simpler.
Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
Cc: Srikanth Srinivasan <srikanth.srinivasan@freescale.com>
Cc: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/rtc')
-rw-r--r-- | drivers/rtc/rtc-ds3232.c | 25 |
1 files changed, 7 insertions, 18 deletions
diff --git a/drivers/rtc/rtc-ds3232.c b/drivers/rtc/rtc-ds3232.c index db0ca08db315..b83bb5a527f8 100644 --- a/drivers/rtc/rtc-ds3232.c +++ b/drivers/rtc/rtc-ds3232.c | |||
@@ -397,7 +397,7 @@ static int ds3232_probe(struct i2c_client *client, | |||
397 | struct ds3232 *ds3232; | 397 | struct ds3232 *ds3232; |
398 | int ret; | 398 | int ret; |
399 | 399 | ||
400 | ds3232 = kzalloc(sizeof(struct ds3232), GFP_KERNEL); | 400 | ds3232 = devm_kzalloc(&client->dev, sizeof(struct ds3232), GFP_KERNEL); |
401 | if (!ds3232) | 401 | if (!ds3232) |
402 | return -ENOMEM; | 402 | return -ENOMEM; |
403 | 403 | ||
@@ -409,34 +409,25 @@ static int ds3232_probe(struct i2c_client *client, | |||
409 | 409 | ||
410 | ret = ds3232_check_rtc_status(client); | 410 | ret = ds3232_check_rtc_status(client); |
411 | if (ret) | 411 | if (ret) |
412 | goto out_free; | 412 | return ret; |
413 | 413 | ||
414 | ds3232->rtc = rtc_device_register(client->name, &client->dev, | 414 | ds3232->rtc = devm_rtc_device_register(&client->dev, client->name, |
415 | &ds3232_rtc_ops, THIS_MODULE); | 415 | &ds3232_rtc_ops, THIS_MODULE); |
416 | if (IS_ERR(ds3232->rtc)) { | 416 | if (IS_ERR(ds3232->rtc)) { |
417 | ret = PTR_ERR(ds3232->rtc); | ||
418 | dev_err(&client->dev, "unable to register the class device\n"); | 417 | dev_err(&client->dev, "unable to register the class device\n"); |
419 | goto out_irq; | 418 | return PTR_ERR(ds3232->rtc); |
420 | } | 419 | } |
421 | 420 | ||
422 | if (client->irq >= 0) { | 421 | if (client->irq >= 0) { |
423 | ret = request_irq(client->irq, ds3232_irq, 0, | 422 | ret = devm_request_irq(&client->dev, client->irq, ds3232_irq, 0, |
424 | "ds3232", client); | 423 | "ds3232", client); |
425 | if (ret) { | 424 | if (ret) { |
426 | dev_err(&client->dev, "unable to request IRQ\n"); | 425 | dev_err(&client->dev, "unable to request IRQ\n"); |
427 | goto out_free; | 426 | return ret; |
428 | } | 427 | } |
429 | } | 428 | } |
430 | 429 | ||
431 | return 0; | 430 | return 0; |
432 | |||
433 | out_irq: | ||
434 | if (client->irq >= 0) | ||
435 | free_irq(client->irq, client); | ||
436 | |||
437 | out_free: | ||
438 | kfree(ds3232); | ||
439 | return ret; | ||
440 | } | 431 | } |
441 | 432 | ||
442 | static int ds3232_remove(struct i2c_client *client) | 433 | static int ds3232_remove(struct i2c_client *client) |
@@ -448,12 +439,10 @@ static int ds3232_remove(struct i2c_client *client) | |||
448 | ds3232->exiting = 1; | 439 | ds3232->exiting = 1; |
449 | mutex_unlock(&ds3232->mutex); | 440 | mutex_unlock(&ds3232->mutex); |
450 | 441 | ||
451 | free_irq(client->irq, client); | 442 | devm_free_irq(&client->dev, client->irq, client); |
452 | cancel_work_sync(&ds3232->work); | 443 | cancel_work_sync(&ds3232->work); |
453 | } | 444 | } |
454 | 445 | ||
455 | rtc_device_unregister(ds3232->rtc); | ||
456 | kfree(ds3232); | ||
457 | return 0; | 446 | return 0; |
458 | } | 447 | } |
459 | 448 | ||