Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

rtc: rtc-sh: use devm_*() functions

Use devm_*() functions to make cleanup paths simpler.

Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Jingoo Han and committed by
Linus Torvalds
0209affa fac42b41

+21 -51
+21 -51
drivers/rtc/rtc-sh.c
··· 593 593 char clk_name[6]; 594 594 int clk_id, ret; 595 595 596 - rtc = kzalloc(sizeof(struct sh_rtc), GFP_KERNEL); 596 + rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL); 597 597 if (unlikely(!rtc)) 598 598 return -ENOMEM; 599 599 ··· 602 602 /* get periodic/carry/alarm irqs */ 603 603 ret = platform_get_irq(pdev, 0); 604 604 if (unlikely(ret <= 0)) { 605 - ret = -ENOENT; 606 605 dev_err(&pdev->dev, "No IRQ resource\n"); 607 - goto err_badres; 606 + return -ENOENT; 608 607 } 609 608 610 609 rtc->periodic_irq = ret; ··· 612 613 613 614 res = platform_get_resource(pdev, IORESOURCE_IO, 0); 614 615 if (unlikely(res == NULL)) { 615 - ret = -ENOENT; 616 616 dev_err(&pdev->dev, "No IO resource\n"); 617 - goto err_badres; 617 + return -ENOENT; 618 618 } 619 619 620 620 rtc->regsize = resource_size(res); 621 621 622 - rtc->res = request_mem_region(res->start, rtc->regsize, pdev->name); 623 - if (unlikely(!rtc->res)) { 624 - ret = -EBUSY; 625 - goto err_badres; 626 - } 622 + rtc->res = devm_request_mem_region(&pdev->dev, res->start, 623 + rtc->regsize, pdev->name); 624 + if (unlikely(!rtc->res)) 625 + return -EBUSY; 627 626 628 - rtc->regbase = ioremap_nocache(rtc->res->start, rtc->regsize); 629 - if (unlikely(!rtc->regbase)) { 630 - ret = -EINVAL; 631 - goto err_badmap; 632 - } 627 + rtc->regbase = devm_ioremap_nocache(&pdev->dev, rtc->res->start, 628 + rtc->regsize); 629 + if (unlikely(!rtc->regbase)) 630 + return -EINVAL; 633 631 634 632 clk_id = pdev->id; 635 633 /* With a single device, the clock id is still "rtc0" */ ··· 635 639 636 640 snprintf(clk_name, sizeof(clk_name), "rtc%d", clk_id); 637 641 638 - rtc->clk = clk_get(&pdev->dev, clk_name); 642 + rtc->clk = devm_clk_get(&pdev->dev, clk_name); 639 643 if (IS_ERR(rtc->clk)) { 640 644 /* 641 645 * No error handling for rtc->clk intentionally, not all ··· 661 665 662 666 if (rtc->carry_irq <= 0) { 663 667 /* register shared periodic/carry/alarm irq */ 664 - ret = request_irq(rtc->periodic_irq, sh_rtc_shared, 665 - 0, "sh-rtc", rtc); 668 + ret = devm_request_irq(&pdev->dev, rtc->periodic_irq, 669 + sh_rtc_shared, 0, "sh-rtc", rtc); 666 670 if (unlikely(ret)) { 667 671 dev_err(&pdev->dev, 668 672 "request IRQ failed with %d, IRQ %d\n", ret, ··· 671 675 } 672 676 } else { 673 677 /* register periodic/carry/alarm irqs */ 674 - ret = request_irq(rtc->periodic_irq, sh_rtc_periodic, 675 - 0, "sh-rtc period", rtc); 678 + ret = devm_request_irq(&pdev->dev, rtc->periodic_irq, 679 + sh_rtc_periodic, 0, "sh-rtc period", rtc); 676 680 if (unlikely(ret)) { 677 681 dev_err(&pdev->dev, 678 682 "request period IRQ failed with %d, IRQ %d\n", ··· 680 684 goto err_unmap; 681 685 } 682 686 683 - ret = request_irq(rtc->carry_irq, sh_rtc_interrupt, 684 - 0, "sh-rtc carry", rtc); 687 + ret = devm_request_irq(&pdev->dev, rtc->carry_irq, 688 + sh_rtc_interrupt, 0, "sh-rtc carry", rtc); 685 689 if (unlikely(ret)) { 686 690 dev_err(&pdev->dev, 687 691 "request carry IRQ failed with %d, IRQ %d\n", 688 692 ret, rtc->carry_irq); 689 - free_irq(rtc->periodic_irq, rtc); 690 693 goto err_unmap; 691 694 } 692 695 693 - ret = request_irq(rtc->alarm_irq, sh_rtc_alarm, 694 - 0, "sh-rtc alarm", rtc); 696 + ret = devm_request_irq(&pdev->dev, rtc->alarm_irq, 697 + sh_rtc_alarm, 0, "sh-rtc alarm", rtc); 695 698 if (unlikely(ret)) { 696 699 dev_err(&pdev->dev, 697 700 "request alarm IRQ failed with %d, IRQ %d\n", 698 701 ret, rtc->alarm_irq); 699 - free_irq(rtc->carry_irq, rtc); 700 - free_irq(rtc->periodic_irq, rtc); 701 702 goto err_unmap; 702 703 } 703 704 } ··· 707 714 sh_rtc_setaie(&pdev->dev, 0); 708 715 sh_rtc_setcie(&pdev->dev, 0); 709 716 710 - rtc->rtc_dev = rtc_device_register("sh", &pdev->dev, 717 + rtc->rtc_dev = devm_rtc_device_register(&pdev->dev, "sh", 711 718 &sh_rtc_ops, THIS_MODULE); 712 719 if (IS_ERR(rtc->rtc_dev)) { 713 720 ret = PTR_ERR(rtc->rtc_dev); 714 - free_irq(rtc->periodic_irq, rtc); 715 - free_irq(rtc->carry_irq, rtc); 716 - free_irq(rtc->alarm_irq, rtc); 717 721 goto err_unmap; 718 722 } 719 723 ··· 727 737 728 738 err_unmap: 729 739 clk_disable(rtc->clk); 730 - clk_put(rtc->clk); 731 - iounmap(rtc->regbase); 732 - err_badmap: 733 - release_mem_region(rtc->res->start, rtc->regsize); 734 - err_badres: 735 - kfree(rtc); 736 740 737 741 return ret; 738 742 } ··· 735 751 { 736 752 struct sh_rtc *rtc = platform_get_drvdata(pdev); 737 753 738 - rtc_device_unregister(rtc->rtc_dev); 739 754 sh_rtc_irq_set_state(&pdev->dev, 0); 740 755 741 756 sh_rtc_setaie(&pdev->dev, 0); 742 757 sh_rtc_setcie(&pdev->dev, 0); 743 758 744 - free_irq(rtc->periodic_irq, rtc); 745 - 746 - if (rtc->carry_irq > 0) { 747 - free_irq(rtc->carry_irq, rtc); 748 - free_irq(rtc->alarm_irq, rtc); 749 - } 750 - 751 - iounmap(rtc->regbase); 752 - release_mem_region(rtc->res->start, rtc->regsize); 753 - 754 759 clk_disable(rtc->clk); 755 - clk_put(rtc->clk); 756 - 757 - kfree(rtc); 758 760 759 761 return 0; 760 762 }