From patchwork Thu Feb 23 16:00:50 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Haojian Zhuang X-Patchwork-Id: 142654 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from mail-vx0-f184.google.com (mail-vx0-f184.google.com [209.85.220.184]) (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 434A0B6EF3 for ; Fri, 24 Feb 2012 02:48:26 +1100 (EST) Received: by vcbfl11 with SMTP id fl11sf1099620vcb.11 for ; Thu, 23 Feb 2012 07:48:24 -0800 (PST) Received-SPF: pass (google.com: domain of rtc-linux+bncCObKqo_qFxDHv5n6BBoEG_2H-w@googlegroups.com designates 10.68.232.106 as permitted sender) client-ip=10.68.232.106; Authentication-Results: mr.google.com; spf=pass (google.com: domain of rtc-linux+bncCObKqo_qFxDHv5n6BBoEG_2H-w@googlegroups.com designates 10.68.232.106 as permitted sender) smtp.mail=rtc-linux+bncCObKqo_qFxDHv5n6BBoEG_2H-w@googlegroups.com; dkim=pass header.i=rtc-linux+bncCObKqo_qFxDHv5n6BBoEG_2H-w@googlegroups.com Received: from mr.google.com ([10.68.232.106]) by 10.68.232.106 with SMTP id tn10mr291456pbc.11.1330012104694 (num_hops = 1); Thu, 23 Feb 2012 07:48:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=beta; h=mime-version:x-beenthere:received-spf:from:to:cc:subject:date :message-id:x-mailer:in-reply-to:references:x-originalarrivaltime :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; bh=4PFlmTvFA4msb3Rh2OrsgC3Pv2w0yhYSMANeWR0J8Rg=; b=OTgX67tusPQ72sBPaxFaBjLD+a5Tvgebp4A3POx+1M7pDDa9eHeLbSguQ6Nk+wmg21 1MWxy/K2MtXp+PMM/kNXohjyK/8GZotMWQSCHMbW77yiSK3PBOZYpEnbvZcBeP+/mmND 1XZXs7+W91F46c/m8jrPaBN8GjKJM3YVkwAJI= Received: by 10.68.232.106 with SMTP id tn10mr90209pbc.11.1330012103602; Thu, 23 Feb 2012 07:48:23 -0800 (PST) MIME-Version: 1.0 X-BeenThere: rtc-linux@googlegroups.com Received: by 10.68.219.2 with SMTP id pk2ls6039280pbc.5.gmail; Thu, 23 Feb 2012 07:48:23 -0800 (PST) Received: by 10.68.129.133 with SMTP id nw5mr1611986pbb.3.1330012103186; Thu, 23 Feb 2012 07:48:23 -0800 (PST) Received: by 10.68.129.133 with SMTP id nw5mr1611984pbb.3.1330012103175; Thu, 23 Feb 2012 07:48:23 -0800 (PST) Received: from na3sys009aog116.obsmtp.com ([74.125.149.240]) by gmr-mx.google.com with SMTP id p7si2444710pbq.0.2012.02.23.07.47.44; Thu, 23 Feb 2012 07:48:23 -0800 (PST) Received-SPF: temperror (google.com: error in processing during lookup of hzhuang1@marvell.com: DNS timeout) client-ip=74.125.149.240; Received: from MSI-MTA.marvell.com ([65.219.4.132]) by na3sys009aob116.postini.com ([74.125.148.12]) with SMTP ID DSNKT0Zfm2zCWJDstVmXbtshcwEhuGICT80M@postini.com; Thu, 23 Feb 2012 07:48:22 PST Received: from maili.marvell.com ([10.68.76.210]) by MSI-MTA.marvell.com with Microsoft SMTPSVC(6.0.3790.3959); Thu, 23 Feb 2012 07:43:44 -0800 Received: from localhost (unknown [10.38.164.65]) by maili.marvell.com (Postfix) with ESMTP id 1F2F14E4BC; Thu, 23 Feb 2012 07:43:44 -0800 (PST) From: Haojian Zhuang To: a.zummo@towertech.it, arnd@arndb.de, rtc-linux@googlegroups.com, robert.jarzmik@free.fr, plagnioj@jcrosoft.com, linux-arm-kernel@lists.infradead.org, linux@arm.linux.org.uk Cc: Haojian Zhuang Subject: [rtc-linux] [PATCH v3 6/7] rtc: sa1100: enable clk support Date: Fri, 24 Feb 2012 00:00:50 +0800 Message-Id: <1330012851-13693-7-git-send-email-haojian.zhuang@marvell.com> X-Mailer: git-send-email 1.7.0.4 In-Reply-To: <1330012851-13693-1-git-send-email-haojian.zhuang@marvell.com> References: <1330012851-13693-1-git-send-email-haojian.zhuang@marvell.com> X-OriginalArrivalTime: 23 Feb 2012 15:43:44.0322 (UTC) FILETIME=[EC9A1A20:01CCF241] X-Original-Sender: haojian.zhuang@marvell.com X-Original-Authentication-Results: gmr-mx.google.com; spf=temperror (google.com: error in processing during lookup of hzhuang1@marvell.com: DNS timeout) smtp.mail=hzhuang1@marvell.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: , Enable clock support on rtc-sa1100. Signed-off-by: Haojian Zhuang --- drivers/rtc/rtc-sa1100.c | 17 +++++++++++++++++ 1 files changed, 17 insertions(+), 0 deletions(-) diff --git a/drivers/rtc/rtc-sa1100.c b/drivers/rtc/rtc-sa1100.c index 0a36c7e..962510c 100644 --- a/drivers/rtc/rtc-sa1100.c +++ b/drivers/rtc/rtc-sa1100.c @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -48,6 +49,7 @@ struct sa1100_rtc { int irq_1hz; int irq_alarm; struct rtc_device *rtc; + struct clk *clk; }; static irqreturn_t sa1100_rtc_interrupt(int irq, void *dev_id) @@ -104,6 +106,9 @@ static int sa1100_rtc_open(struct device *dev) struct rtc_device *rtc = info->rtc; int ret; + ret = clk_prepare_enable(info->clk); + if (ret) + goto fail_clk; ret = request_irq(info->irq_1hz, sa1100_rtc_interrupt, IRQF_DISABLED, "rtc 1Hz", dev); if (ret) { @@ -124,6 +129,8 @@ static int sa1100_rtc_open(struct device *dev) fail_ai: free_irq(info->irq_1hz, dev); fail_ui: + clk_disable_unprepare(info->clk); + fail_clk: return ret; } @@ -137,6 +144,7 @@ static void sa1100_rtc_release(struct device *dev) free_irq(info->irq_alarm, dev); free_irq(info->irq_1hz, dev); + clk_disable_unprepare(info->clk); } static int sa1100_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled) @@ -234,6 +242,12 @@ static int sa1100_rtc_probe(struct platform_device *pdev) info = kzalloc(sizeof(struct sa1100_rtc), GFP_KERNEL); if (!info) return -ENOMEM; + info->clk = clk_get(&pdev->dev, NULL); + if (IS_ERR(info->clk)) { + dev_err(&pdev->dev, "failed to find rtc clock source\n"); + ret = PTR_ERR(info->clk); + goto err_clk; + } info->irq_1hz = irq_1hz; info->irq_alarm = irq_alarm; spin_lock_init(&info->lock); @@ -292,6 +306,8 @@ static int sa1100_rtc_probe(struct platform_device *pdev) return 0; err_dev: platform_set_drvdata(pdev, NULL); + clk_put(info->clk); +err_clk: kfree(info); return ret; } @@ -302,6 +318,7 @@ static int sa1100_rtc_remove(struct platform_device *pdev) if (info) { rtc_device_unregister(info->rtc); + clk_put(info->clk); platform_set_drvdata(pdev, NULL); kfree(info); }