aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rtc
diff options
context:
space:
mode:
authorSachin Kamat <sachin.kamat@linaro.org>2013-04-29 19:20:31 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-04-29 21:28:36 -0400
commit66714612783525bf3fd389f886822d89d1be2cbf (patch)
tree13484175aa805a93ee64135985086710128eb19b /drivers/rtc
parentd1a9663964d3520435f887ba6a15b98d8a6ac312 (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.c25
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
433out_irq:
434 if (client->irq >= 0)
435 free_irq(client->irq, client);
436
437out_free:
438 kfree(ds3232);
439 return ret;
440} 431}
441 432
442static int ds3232_remove(struct i2c_client *client) 433static 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