From patchwork Tue May 21 06:18:54 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jingoo Han X-Patchwork-Id: 245195 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from mail-ob0-x239.google.com (mail-ob0-x239.google.com [IPv6:2607:f8b0:4003:c01::239]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority" (not verified)) by ozlabs.org (Postfix) with ESMTPS id 697DC2C0087 for ; Tue, 21 May 2013 16:18:58 +1000 (EST) Received: by mail-ob0-f185.google.com with SMTP id tb18sf82335obb.22 for ; Mon, 20 May 2013 23:18:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20120806; h=x-beenthere:x-auditid:from:to:cc:subject:date:message-id :mime-version:x-mailer:thread-index:x-brightmail-tracker :x-brightmail-tracker:dlp-filter:x-mtr:x-cfilter-loop :x-original-sender:x-original-authentication-results:reply-to :precedence:mailing-list:list-id:x-google-group-id:list-post :list-help:list-archive:sender:list-subscribe:list-unsubscribe :content-type:content-language; bh=AJqgDLxOM3Euk1ICXCYUp+073PP/XaliTAOHN8/y/KA=; b=KxdChsG0Z1UUKMtVOM3V7MSXMgxRTuOhSXa9qXi1xWFhUos2K5lMN1R8lmT/I54d74 Y6DvxVRdyDCLQTnp6d0mwePeMq7SzqLujpcmdGCTWURZFb6OifynMM0QiIXWseSw3x5I oJeWLKLdXMNxzPl9E582yzFa1Rp4pI5MJcx1JsCZnrqJRk+Ki2LyucRHAGJrTmLvR0DU 6xHpfjPz7bxbB6dnzSBpkVIEuJSiFg/M7MmyAyP638HdIVFH043K+ubCjxVQ0yOR4vPb as4YVaXdB2GEB9glO0w9BhlHrC2IsvtxJcpI7lnBceJN1c3kLPUL1zOC4oM6rGhp8imy AZaw== X-Received: by 10.50.12.4 with SMTP id u4mr74314igb.5.1369117135913; Mon, 20 May 2013 23:18:55 -0700 (PDT) X-BeenThere: rtc-linux@googlegroups.com Received: by 10.50.117.36 with SMTP id kb4ls263923igb.11.gmail; Mon, 20 May 2013 23:18:55 -0700 (PDT) X-Received: by 10.66.150.129 with SMTP id ui1mr138703pab.25.1369117135620; Mon, 20 May 2013 23:18:55 -0700 (PDT) Received: from mailout4.samsung.com (mailout4.samsung.com. [203.254.224.34]) by gmr-mx.google.com with ESMTP id gi6si177641pbc.2.2013.05.20.23.18.55 for ; Mon, 20 May 2013 23:18:55 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of jg1.han@samsung.com designates 203.254.224.34 as permitted sender) client-ip=203.254.224.34; Received: from epcpsbgr5.samsung.com (u145.gpu120.samsung.co.kr [203.254.230.145]) by mailout4.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0MN4009U7XIWNBO0@mailout4.samsung.com> for rtc-linux@googlegroups.com; Tue, 21 May 2013 15:18:54 +0900 (KST) Received: from epcpsbgm2.samsung.com ( [203.254.230.50]) by epcpsbgr5.samsung.com (EPCPMTA) with SMTP id 4F.0A.11618.EC11B915; Tue, 21 May 2013 15:18:54 +0900 (KST) X-AuditID: cbfee691-b7fef6d000002d62-d6-519b11ceb1b9 Received: from epmmp1.local.host ( [203.254.227.16]) by epcpsbgm2.samsung.com (EPCPMTA) with SMTP id D1.33.17674.EC11B915; Tue, 21 May 2013 15:18:54 +0900 (KST) Received: from DOJG1HAN03 ([12.23.120.99]) by mmp1.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0MN400F7YXJIPE80@mmp1.samsung.com>; Tue, 21 May 2013 15:18:54 +0900 (KST) From: Jingoo Han To: 'Andrew Morton' Cc: linux-kernel@vger.kernel.org, 'Alessandro Zummo' , rtc-linux@googlegroups.com, Jingoo Han Subject: [rtc-linux] [PATCH 8/8] rtc: rtc-sh: use devm_*() functions Date: Tue, 21 May 2013 15:18:54 +0900 Message-id: <000b01ce55eb$119424c0$34bc6e40$@samsung.com> MIME-version: 1.0 X-Mailer: Microsoft Outlook 14.0 Thread-index: Ac5V6w9dLmdhojZkS16HBVhjfXTA5Q== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrIIsWRmVeSWpSXmKPExsVy+t8zI91zgrMDDQ4+lrNYcvEqu8Wc9WvY LC4vvMRqcXnXHDaL/Z0djA6sHnsmnmTzODHjN4tH35ZVjB7T5/1k8vi8SS6ANYrLJiU1J7Ms tUjfLoEr43z7ctaCy9oVr08uZGtgnKrcxcjJISFgIvHv1HlWCFtM4sK99WxdjFwcQgLLGCVm LlzPAlM0bdZfFojEIkaJ3gOPoKp+MUocn/2QGaSKTUBN4suXw+xdjBwcIgL6Em0tGiA1zALd jBKPmueC1QgLWEi8a5vKDmKzCKhKvHnfBRbnFbCUePbsNAuELSjxY/I9MJtZQEti/c7jTBC2 vMTmNW+ZIS5SkNhx9jUjiC0ioCcx6eENqBoRiX0v3jGCLJYQOMYusXTmMWaIZQIS3yYfYgE5 TkJAVmLTAag5khIHV9xgmcAoNgvJ6llIVs9CsnoWkhULGFlWMYqmFiQXFCelF5nqFSfmFpfm pesl5+duYoRE38QdjPcPWB9iTAZaP5FZSjQ5Hxi9eSXxhsZmRhamJqbGRuaWZqQJK4nzqrdY BwoJpCeWpGanphakFsUXleakFh9iZOLglGpgLL3KOM+ugmuOrV7q6udf0xTjv2q4VheEThRQ cKj5/VsyKVLMbLv/6Tf3ZU9UzmueUfLMLGJrx+Q7NdMb+Be2LzPu53lu0XN6X+VtA5e/oRkV s+erntK2vvDt84otocqzDogqiWtvCgmY+y82X6pMmq3x0+UtqXnfA7L5/7x6dWDjjsa6+jn/ lViKMxINtZiLihMBrV348NQCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprHKsWRmVeSWpSXmKPExsVy+t9jAd1zgrMDDe5ukLJYcvEqu8Wc9WvY LC4vvMRqcXnXHDaL/Z0djA6sHnsmnmTzODHjN4tH35ZVjB7T5/1k8vi8SS6ANaqB0SYjNTEl tUghNS85PyUzL91WyTs43jne1MzAUNfQ0sJcSSEvMTfVVsnFJ0DXLTMHaLuSQlliTilQKCCx uFhJ3w7ThNAQN10LmMYIXd+QILgeIwM0kLCOMeN8+3LWgsvaFa9PLmRrYJyq3MXIySEhYCIx bdZfFghbTOLCvfVsXYxcHEICixgleg88gnJ+MUocn/2QGaSKTUBN4suXw+xdjBwcIgL6Em0t GiA1zALdjBKPmueC1QgLWEi8a5vKDmKzCKhKvHnfBRbnFbCUePbsNAuELSjxY/I9MJtZQEti /c7jTBC2vMTmNW+ZIS5SkNhx9jUjiC0ioCcx6eENqBoRiX0v3jFOYBSYhWTULCSjZiEZNQtJ ywJGllWMoqkFyQXFSem5RnrFibnFpXnpesn5uZsYwbH9THoH46oGi0OMAhyMSjy8AoazAoVY E8uKK3MPMUpwMCuJ8H5vBgrxpiRWVqUW5ccXleakFh9iTAb6dCKzlGhyPjDt5JXEGxqbmBlZ GplZGJmYm5MmrCTOe7DVOlBIID2xJDU7NbUgtQhmCxMHp1QDo7oQz5eTbP9+nGm+nzut20ni xIKfvX/KPj7ftTymqZJbs0nRknPfcgGPsCVRb7XiJpWp/6mdxG8+cUHeRdN/WhcvXJ/60eKp XIxvv1fO546fm4/PfCTD2lK0gWm+l57I2esNMXODLy+wYnnwU27q4/WKUyvmTV384w6jr/sy sTfzDYVOL/+YlK/EUpyRaKjFXFScCABaSYUtMQMAAA== DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected X-Original-Sender: jg1.han@samsung.com X-Original-Authentication-Results: gmr-mx.google.com; spf=pass (google.com: best guess record for domain of jg1.han@samsung.com designates 203.254.224.34 as permitted sender) smtp.mail=jg1.han@samsung.com Reply-To: rtc-linux@googlegroups.com Precedence: list Mailing-list: list rtc-linux@googlegroups.com; contact rtc-linux+owners@googlegroups.com List-ID: X-Google-Group-Id: 712029733259 List-Post: , List-Help: , List-Archive: Sender: rtc-linux@googlegroups.com List-Subscribe: , List-Unsubscribe: , Content-type: text/plain; charset=ISO-8859-1 Content-language: ko Use devm_*() functions to make cleanup paths simpler. Signed-off-by: Jingoo Han --- drivers/rtc/rtc-sh.c | 72 +++++++++++++++----------------------------------- 1 file changed, 21 insertions(+), 51 deletions(-) diff --git a/drivers/rtc/rtc-sh.c b/drivers/rtc/rtc-sh.c index cb2f839..6d87e26 100644 --- a/drivers/rtc/rtc-sh.c +++ b/drivers/rtc/rtc-sh.c @@ -593,7 +593,7 @@ static int __init sh_rtc_probe(struct platform_device *pdev) char clk_name[6]; int clk_id, ret; - rtc = kzalloc(sizeof(struct sh_rtc), GFP_KERNEL); + rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL); if (unlikely(!rtc)) return -ENOMEM; @@ -602,9 +602,8 @@ static int __init sh_rtc_probe(struct platform_device *pdev) /* get periodic/carry/alarm irqs */ ret = platform_get_irq(pdev, 0); if (unlikely(ret <= 0)) { - ret = -ENOENT; dev_err(&pdev->dev, "No IRQ resource\n"); - goto err_badres; + return -ENOENT; } rtc->periodic_irq = ret; @@ -613,24 +612,21 @@ static int __init sh_rtc_probe(struct platform_device *pdev) res = platform_get_resource(pdev, IORESOURCE_IO, 0); if (unlikely(res == NULL)) { - ret = -ENOENT; dev_err(&pdev->dev, "No IO resource\n"); - goto err_badres; + return -ENOENT; } rtc->regsize = resource_size(res); - rtc->res = request_mem_region(res->start, rtc->regsize, pdev->name); - if (unlikely(!rtc->res)) { - ret = -EBUSY; - goto err_badres; - } + rtc->res = devm_request_mem_region(&pdev->dev, res->start, + rtc->regsize, pdev->name); + if (unlikely(!rtc->res)) + return -EBUSY; - rtc->regbase = ioremap_nocache(rtc->res->start, rtc->regsize); - if (unlikely(!rtc->regbase)) { - ret = -EINVAL; - goto err_badmap; - } + rtc->regbase = devm_ioremap_nocache(&pdev->dev, rtc->res->start, + rtc->regsize); + if (unlikely(!rtc->regbase)) + return -EINVAL; clk_id = pdev->id; /* With a single device, the clock id is still "rtc0" */ @@ -639,7 +635,7 @@ static int __init sh_rtc_probe(struct platform_device *pdev) snprintf(clk_name, sizeof(clk_name), "rtc%d", clk_id); - rtc->clk = clk_get(&pdev->dev, clk_name); + rtc->clk = devm_clk_get(&pdev->dev, clk_name); if (IS_ERR(rtc->clk)) { /* * No error handling for rtc->clk intentionally, not all @@ -665,8 +661,8 @@ static int __init sh_rtc_probe(struct platform_device *pdev) if (rtc->carry_irq <= 0) { /* register shared periodic/carry/alarm irq */ - ret = request_irq(rtc->periodic_irq, sh_rtc_shared, - 0, "sh-rtc", rtc); + ret = devm_request_irq(&pdev->dev, rtc->periodic_irq, + sh_rtc_shared, 0, "sh-rtc", rtc); if (unlikely(ret)) { dev_err(&pdev->dev, "request IRQ failed with %d, IRQ %d\n", ret, @@ -675,8 +671,8 @@ static int __init sh_rtc_probe(struct platform_device *pdev) } } else { /* register periodic/carry/alarm irqs */ - ret = request_irq(rtc->periodic_irq, sh_rtc_periodic, - 0, "sh-rtc period", rtc); + ret = devm_request_irq(&pdev->dev, rtc->periodic_irq, + sh_rtc_periodic, 0, "sh-rtc period", rtc); if (unlikely(ret)) { dev_err(&pdev->dev, "request period IRQ failed with %d, IRQ %d\n", @@ -684,24 +680,21 @@ static int __init sh_rtc_probe(struct platform_device *pdev) goto err_unmap; } - ret = request_irq(rtc->carry_irq, sh_rtc_interrupt, - 0, "sh-rtc carry", rtc); + ret = devm_request_irq(&pdev->dev, rtc->carry_irq, + sh_rtc_interrupt, 0, "sh-rtc carry", rtc); if (unlikely(ret)) { dev_err(&pdev->dev, "request carry IRQ failed with %d, IRQ %d\n", ret, rtc->carry_irq); - free_irq(rtc->periodic_irq, rtc); goto err_unmap; } - ret = request_irq(rtc->alarm_irq, sh_rtc_alarm, - 0, "sh-rtc alarm", rtc); + ret = devm_request_irq(&pdev->dev, rtc->alarm_irq, + sh_rtc_alarm, 0, "sh-rtc alarm", rtc); if (unlikely(ret)) { dev_err(&pdev->dev, "request alarm IRQ failed with %d, IRQ %d\n", ret, rtc->alarm_irq); - free_irq(rtc->carry_irq, rtc); - free_irq(rtc->periodic_irq, rtc); goto err_unmap; } } @@ -714,13 +707,10 @@ static int __init sh_rtc_probe(struct platform_device *pdev) sh_rtc_setaie(&pdev->dev, 0); sh_rtc_setcie(&pdev->dev, 0); - rtc->rtc_dev = rtc_device_register("sh", &pdev->dev, + rtc->rtc_dev = devm_rtc_device_register(&pdev->dev, "sh", &sh_rtc_ops, THIS_MODULE); if (IS_ERR(rtc->rtc_dev)) { ret = PTR_ERR(rtc->rtc_dev); - free_irq(rtc->periodic_irq, rtc); - free_irq(rtc->carry_irq, rtc); - free_irq(rtc->alarm_irq, rtc); goto err_unmap; } @@ -737,12 +727,6 @@ static int __init sh_rtc_probe(struct platform_device *pdev) err_unmap: clk_disable(rtc->clk); - clk_put(rtc->clk); - iounmap(rtc->regbase); -err_badmap: - release_mem_region(rtc->res->start, rtc->regsize); -err_badres: - kfree(rtc); return ret; } @@ -751,26 +735,12 @@ static int __exit sh_rtc_remove(struct platform_device *pdev) { struct sh_rtc *rtc = platform_get_drvdata(pdev); - rtc_device_unregister(rtc->rtc_dev); sh_rtc_irq_set_state(&pdev->dev, 0); sh_rtc_setaie(&pdev->dev, 0); sh_rtc_setcie(&pdev->dev, 0); - free_irq(rtc->periodic_irq, rtc); - - if (rtc->carry_irq > 0) { - free_irq(rtc->carry_irq, rtc); - free_irq(rtc->alarm_irq, rtc); - } - - iounmap(rtc->regbase); - release_mem_region(rtc->res->start, rtc->regsize); - clk_disable(rtc->clk); - clk_put(rtc->clk); - - kfree(rtc); return 0; }