aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mfd/twl6040.c
diff options
context:
space:
mode:
authorJingoo Han <jg1.han@samsung.com>2013-02-20 04:30:21 -0500
committerSamuel Ortiz <sameo@linux.intel.com>2013-04-08 11:25:27 -0400
commit990810b035b6f151085595c7dadf55fe23e65bbf (patch)
treead8a67b6e55bb65650ed0ca4302d0c9947aec994 /drivers/mfd/twl6040.c
parent0287714b45c601789401e2ce28e45ea50925e419 (diff)
mfd: twl6040: 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>
Diffstat (limited to 'drivers/mfd/twl6040.c')
-rw-r--r--drivers/mfd/twl6040.c31
1 files changed, 11 insertions, 20 deletions
diff --git a/drivers/mfd/twl6040.c b/drivers/mfd/twl6040.c
index f361bf38a0aa..492ee2cd3400 100644
--- a/drivers/mfd/twl6040.c
+++ b/drivers/mfd/twl6040.c
@@ -554,7 +554,7 @@ static int twl6040_probe(struct i2c_client *client,
554 554
555 twl6040->supplies[0].supply = "vio"; 555 twl6040->supplies[0].supply = "vio";
556 twl6040->supplies[1].supply = "v2v1"; 556 twl6040->supplies[1].supply = "v2v1";
557 ret = regulator_bulk_get(&client->dev, TWL6040_NUM_SUPPLIES, 557 ret = devm_regulator_bulk_get(&client->dev, TWL6040_NUM_SUPPLIES,
558 twl6040->supplies); 558 twl6040->supplies);
559 if (ret != 0) { 559 if (ret != 0) {
560 dev_err(&client->dev, "Failed to get supplies: %d\n", ret); 560 dev_err(&client->dev, "Failed to get supplies: %d\n", ret);
@@ -564,7 +564,7 @@ static int twl6040_probe(struct i2c_client *client,
564 ret = regulator_bulk_enable(TWL6040_NUM_SUPPLIES, twl6040->supplies); 564 ret = regulator_bulk_enable(TWL6040_NUM_SUPPLIES, twl6040->supplies);
565 if (ret != 0) { 565 if (ret != 0) {
566 dev_err(&client->dev, "Failed to enable supplies: %d\n", ret); 566 dev_err(&client->dev, "Failed to enable supplies: %d\n", ret);
567 goto power_err; 567 goto regulator_get_err;
568 } 568 }
569 569
570 twl6040->dev = &client->dev; 570 twl6040->dev = &client->dev;
@@ -586,8 +586,8 @@ static int twl6040_probe(struct i2c_client *client,
586 twl6040->audpwron = -EINVAL; 586 twl6040->audpwron = -EINVAL;
587 587
588 if (gpio_is_valid(twl6040->audpwron)) { 588 if (gpio_is_valid(twl6040->audpwron)) {
589 ret = gpio_request_one(twl6040->audpwron, GPIOF_OUT_INIT_LOW, 589 ret = devm_gpio_request_one(&client->dev, twl6040->audpwron,
590 "audpwron"); 590 GPIOF_OUT_INIT_LOW, "audpwron");
591 if (ret) 591 if (ret)
592 goto gpio_err; 592 goto gpio_err;
593 } 593 }
@@ -596,14 +596,14 @@ static int twl6040_probe(struct i2c_client *client,
596 IRQF_ONESHOT, 0, &twl6040_irq_chip, 596 IRQF_ONESHOT, 0, &twl6040_irq_chip,
597 &twl6040->irq_data); 597 &twl6040->irq_data);
598 if (ret < 0) 598 if (ret < 0)
599 goto irq_init_err; 599 goto gpio_err;
600 600
601 twl6040->irq_ready = regmap_irq_get_virq(twl6040->irq_data, 601 twl6040->irq_ready = regmap_irq_get_virq(twl6040->irq_data,
602 TWL6040_IRQ_READY); 602 TWL6040_IRQ_READY);
603 twl6040->irq_th = regmap_irq_get_virq(twl6040->irq_data, 603 twl6040->irq_th = regmap_irq_get_virq(twl6040->irq_data,
604 TWL6040_IRQ_TH); 604 TWL6040_IRQ_TH);
605 605
606 ret = request_threaded_irq(twl6040->irq_ready, NULL, 606 ret = devm_request_threaded_irq(twl6040->dev, twl6040->irq_ready, NULL,
607 twl6040_readyint_handler, IRQF_ONESHOT, 607 twl6040_readyint_handler, IRQF_ONESHOT,
608 "twl6040_irq_ready", twl6040); 608 "twl6040_irq_ready", twl6040);
609 if (ret) { 609 if (ret) {
@@ -611,7 +611,7 @@ static int twl6040_probe(struct i2c_client *client,
611 goto readyirq_err; 611 goto readyirq_err;
612 } 612 }
613 613
614 ret = request_threaded_irq(twl6040->irq_th, NULL, 614 ret = devm_request_threaded_irq(twl6040->dev, twl6040->irq_th, NULL,
615 twl6040_thint_handler, IRQF_ONESHOT, 615 twl6040_thint_handler, IRQF_ONESHOT,
616 "twl6040_irq_th", twl6040); 616 "twl6040_irq_th", twl6040);
617 if (ret) { 617 if (ret) {
@@ -681,18 +681,13 @@ static int twl6040_probe(struct i2c_client *client,
681 return 0; 681 return 0;
682 682
683mfd_err: 683mfd_err:
684 free_irq(twl6040->irq_th, twl6040); 684 devm_free_irq(&client->dev, twl6040->irq_th, twl6040);
685thirq_err: 685thirq_err:
686 free_irq(twl6040->irq_ready, twl6040); 686 devm_free_irq(&client->dev, twl6040->irq_ready, twl6040);
687readyirq_err: 687readyirq_err:
688 regmap_del_irq_chip(twl6040->irq, twl6040->irq_data); 688 regmap_del_irq_chip(twl6040->irq, twl6040->irq_data);
689irq_init_err:
690 if (gpio_is_valid(twl6040->audpwron))
691 gpio_free(twl6040->audpwron);
692gpio_err: 689gpio_err:
693 regulator_bulk_disable(TWL6040_NUM_SUPPLIES, twl6040->supplies); 690 regulator_bulk_disable(TWL6040_NUM_SUPPLIES, twl6040->supplies);
694power_err:
695 regulator_bulk_free(TWL6040_NUM_SUPPLIES, twl6040->supplies);
696regulator_get_err: 691regulator_get_err:
697 i2c_set_clientdata(client, NULL); 692 i2c_set_clientdata(client, NULL);
698err: 693err:
@@ -706,18 +701,14 @@ static int twl6040_remove(struct i2c_client *client)
706 if (twl6040->power_count) 701 if (twl6040->power_count)
707 twl6040_power(twl6040, 0); 702 twl6040_power(twl6040, 0);
708 703
709 if (gpio_is_valid(twl6040->audpwron)) 704 devm_free_irq(&client->dev, twl6040->irq_ready, twl6040);
710 gpio_free(twl6040->audpwron); 705 devm_free_irq(&client->dev, twl6040->irq_th, twl6040);
711
712 free_irq(twl6040->irq_ready, twl6040);
713 free_irq(twl6040->irq_th, twl6040);
714 regmap_del_irq_chip(twl6040->irq, twl6040->irq_data); 706 regmap_del_irq_chip(twl6040->irq, twl6040->irq_data);
715 707
716 mfd_remove_devices(&client->dev); 708 mfd_remove_devices(&client->dev);
717 i2c_set_clientdata(client, NULL); 709 i2c_set_clientdata(client, NULL);
718 710
719 regulator_bulk_disable(TWL6040_NUM_SUPPLIES, twl6040->supplies); 711 regulator_bulk_disable(TWL6040_NUM_SUPPLIES, twl6040->supplies);
720 regulator_bulk_free(TWL6040_NUM_SUPPLIES, twl6040->supplies);
721 712
722 return 0; 713 return 0;
723} 714}