aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJingoo Han <jg1.han@samsung.com>2013-02-20 04:31:26 -0500
committerSamuel Ortiz <sameo@linux.intel.com>2013-04-08 11:25:28 -0400
commitaa4dcf5bec80501933c6935f50f438594823c614 (patch)
treeb06911c246ac3f84a1d2102333841ebf9e865118
parent1ba895e0487810ee44eb08585e6810ad66159988 (diff)
mfd: da903x: Use devm_*() functions
Use devm_*() functions to make cleanup paths more simple. Signed-off-by: Jingoo Han <jg1.han@samsung.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
-rw-r--r--drivers/mfd/da903x.c19
1 files changed, 6 insertions, 13 deletions
diff --git a/drivers/mfd/da903x.c b/drivers/mfd/da903x.c
index 05176cd2862b..f1a316e0d6a6 100644
--- a/drivers/mfd/da903x.c
+++ b/drivers/mfd/da903x.c
@@ -499,7 +499,8 @@ static int da903x_probe(struct i2c_client *client,
499 unsigned int tmp; 499 unsigned int tmp;
500 int ret; 500 int ret;
501 501
502 chip = kzalloc(sizeof(struct da903x_chip), GFP_KERNEL); 502 chip = devm_kzalloc(&client->dev, sizeof(struct da903x_chip),
503 GFP_KERNEL);
503 if (chip == NULL) 504 if (chip == NULL)
504 return -ENOMEM; 505 return -ENOMEM;
505 506
@@ -515,33 +516,27 @@ static int da903x_probe(struct i2c_client *client,
515 516
516 ret = chip->ops->init_chip(chip); 517 ret = chip->ops->init_chip(chip);
517 if (ret) 518 if (ret)
518 goto out_free_chip; 519 return ret;
519 520
520 /* mask and clear all IRQs */ 521 /* mask and clear all IRQs */
521 chip->events_mask = 0xffffffff; 522 chip->events_mask = 0xffffffff;
522 chip->ops->mask_events(chip, chip->events_mask); 523 chip->ops->mask_events(chip, chip->events_mask);
523 chip->ops->read_events(chip, &tmp); 524 chip->ops->read_events(chip, &tmp);
524 525
525 ret = request_irq(client->irq, da903x_irq_handler, 526 ret = devm_request_irq(&client->dev, client->irq, da903x_irq_handler,
526 IRQF_TRIGGER_FALLING, 527 IRQF_TRIGGER_FALLING,
527 "da903x", chip); 528 "da903x", chip);
528 if (ret) { 529 if (ret) {
529 dev_err(&client->dev, "failed to request irq %d\n", 530 dev_err(&client->dev, "failed to request irq %d\n",
530 client->irq); 531 client->irq);
531 goto out_free_chip; 532 return ret;
532 } 533 }
533 534
534 ret = da903x_add_subdevs(chip, pdata); 535 ret = da903x_add_subdevs(chip, pdata);
535 if (ret) 536 if (ret)
536 goto out_free_irq; 537 return ret;
537 538
538 return 0; 539 return 0;
539
540out_free_irq:
541 free_irq(client->irq, chip);
542out_free_chip:
543 kfree(chip);
544 return ret;
545} 540}
546 541
547static int da903x_remove(struct i2c_client *client) 542static int da903x_remove(struct i2c_client *client)
@@ -549,8 +544,6 @@ static int da903x_remove(struct i2c_client *client)
549 struct da903x_chip *chip = i2c_get_clientdata(client); 544 struct da903x_chip *chip = i2c_get_clientdata(client);
550 545
551 da903x_remove_subdevs(chip); 546 da903x_remove_subdevs(chip);
552 free_irq(client->irq, chip);
553 kfree(chip);
554 return 0; 547 return 0;
555} 548}
556 549