|
5 | 5 | // Copyright (C) 2012 Samsung Electronics |
6 | 6 | // Donggeun Kim <dg77.kim@samsung.com> |
7 | 7 |
|
| 8 | +#include <linux/devm-helpers.h> |
8 | 9 | #include <linux/kernel.h> |
9 | 10 | #include <linux/module.h> |
10 | 11 | #include <linux/i2c.h> |
@@ -650,42 +651,44 @@ static int max8997_muic_probe(struct platform_device *pdev) |
650 | 651 | mutex_init(&info->mutex); |
651 | 652 |
|
652 | 653 | INIT_WORK(&info->irq_work, max8997_muic_irq_work); |
| 654 | + ret = devm_work_autocancel(&pdev->dev, &info->irq_work, |
| 655 | + max8997_muic_irq_work); |
| 656 | + if (ret) |
| 657 | + return ret; |
653 | 658 |
|
654 | 659 | for (i = 0; i < ARRAY_SIZE(muic_irqs); i++) { |
655 | 660 | struct max8997_muic_irq *muic_irq = &muic_irqs[i]; |
656 | 661 | unsigned int virq = 0; |
657 | 662 |
|
658 | 663 | virq = irq_create_mapping(max8997->irq_domain, muic_irq->irq); |
659 | | - if (!virq) { |
660 | | - ret = -EINVAL; |
661 | | - goto err_irq; |
662 | | - } |
| 664 | + if (!virq) |
| 665 | + return -EINVAL; |
| 666 | + |
663 | 667 | muic_irq->virq = virq; |
664 | 668 |
|
665 | | - ret = request_threaded_irq(virq, NULL, |
666 | | - max8997_muic_irq_handler, |
667 | | - IRQF_NO_SUSPEND, |
668 | | - muic_irq->name, info); |
| 669 | + ret = devm_request_threaded_irq(&pdev->dev, virq, NULL, |
| 670 | + max8997_muic_irq_handler, |
| 671 | + IRQF_NO_SUSPEND, |
| 672 | + muic_irq->name, info); |
669 | 673 | if (ret) { |
670 | 674 | dev_err(&pdev->dev, |
671 | 675 | "failed: irq request (IRQ: %d, error :%d)\n", |
672 | 676 | muic_irq->irq, ret); |
673 | | - goto err_irq; |
| 677 | + return ret; |
674 | 678 | } |
675 | 679 | } |
676 | 680 |
|
677 | 681 | /* External connector */ |
678 | 682 | info->edev = devm_extcon_dev_allocate(&pdev->dev, max8997_extcon_cable); |
679 | 683 | if (IS_ERR(info->edev)) { |
680 | 684 | dev_err(&pdev->dev, "failed to allocate memory for extcon\n"); |
681 | | - ret = PTR_ERR(info->edev); |
682 | | - goto err_irq; |
| 685 | + return PTR_ERR(info->edev); |
683 | 686 | } |
684 | 687 |
|
685 | 688 | ret = devm_extcon_dev_register(&pdev->dev, info->edev); |
686 | 689 | if (ret) { |
687 | 690 | dev_err(&pdev->dev, "failed to register extcon device\n"); |
688 | | - goto err_irq; |
| 691 | + return ret; |
689 | 692 | } |
690 | 693 |
|
691 | 694 | if (pdata && pdata->muic_pdata) { |
@@ -756,31 +759,13 @@ static int max8997_muic_probe(struct platform_device *pdev) |
756 | 759 | delay_jiffies); |
757 | 760 |
|
758 | 761 | return 0; |
759 | | - |
760 | | -err_irq: |
761 | | - while (--i >= 0) |
762 | | - free_irq(muic_irqs[i].virq, info); |
763 | | - return ret; |
764 | | -} |
765 | | - |
766 | | -static int max8997_muic_remove(struct platform_device *pdev) |
767 | | -{ |
768 | | - struct max8997_muic_info *info = platform_get_drvdata(pdev); |
769 | | - int i; |
770 | | - |
771 | | - for (i = 0; i < ARRAY_SIZE(muic_irqs); i++) |
772 | | - free_irq(muic_irqs[i].virq, info); |
773 | | - cancel_work_sync(&info->irq_work); |
774 | | - |
775 | | - return 0; |
776 | 762 | } |
777 | 763 |
|
778 | 764 | static struct platform_driver max8997_muic_driver = { |
779 | 765 | .driver = { |
780 | 766 | .name = DEV_NAME, |
781 | 767 | }, |
782 | 768 | .probe = max8997_muic_probe, |
783 | | - .remove = max8997_muic_remove, |
784 | 769 | }; |
785 | 770 |
|
786 | 771 | module_platform_driver(max8997_muic_driver); |
|
0 commit comments