diff options
author | Jingoo Han <jg1.han@samsung.com> | 2013-02-20 04:30:21 -0500 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2013-04-08 11:25:27 -0400 |
commit | 990810b035b6f151085595c7dadf55fe23e65bbf (patch) | |
tree | ad8a67b6e55bb65650ed0ca4302d0c9947aec994 /drivers/mfd/twl6040.c | |
parent | 0287714b45c601789401e2ce28e45ea50925e419 (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.c | 31 |
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 | ||
683 | mfd_err: | 683 | mfd_err: |
684 | free_irq(twl6040->irq_th, twl6040); | 684 | devm_free_irq(&client->dev, twl6040->irq_th, twl6040); |
685 | thirq_err: | 685 | thirq_err: |
686 | free_irq(twl6040->irq_ready, twl6040); | 686 | devm_free_irq(&client->dev, twl6040->irq_ready, twl6040); |
687 | readyirq_err: | 687 | readyirq_err: |
688 | regmap_del_irq_chip(twl6040->irq, twl6040->irq_data); | 688 | regmap_del_irq_chip(twl6040->irq, twl6040->irq_data); |
689 | irq_init_err: | ||
690 | if (gpio_is_valid(twl6040->audpwron)) | ||
691 | gpio_free(twl6040->audpwron); | ||
692 | gpio_err: | 689 | gpio_err: |
693 | regulator_bulk_disable(TWL6040_NUM_SUPPLIES, twl6040->supplies); | 690 | regulator_bulk_disable(TWL6040_NUM_SUPPLIES, twl6040->supplies); |
694 | power_err: | ||
695 | regulator_bulk_free(TWL6040_NUM_SUPPLIES, twl6040->supplies); | ||
696 | regulator_get_err: | 691 | regulator_get_err: |
697 | i2c_set_clientdata(client, NULL); | 692 | i2c_set_clientdata(client, NULL); |
698 | err: | 693 | err: |
@@ -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 | } |