From patchwork Thu Nov 20 02:28:23 2008 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Brownell X-Patchwork-Id: 9677 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from wf-out-1516.google.com (wf-out-1516.google.com [209.85.200.165]) by ozlabs.org (Postfix) with ESMTP id C2038DDE08 for ; Thu, 20 Nov 2008 13:28:32 +1100 (EST) Received: by wf-out-1516.google.com with SMTP id r34so90185wfc.41 for ; Wed, 19 Nov 2008 18:28:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=beta; h=domainkey-signature:received:received:x-sender:x-apparently-to :received:received:received-spf:domainkey-status :authentication-results:received:domainkey-signature:received :x-ymail-osg:x-yahoo-newman-property:from:reply-to:to:subject:date :user-agent:cc:references:in-reply-to:mime-version:content-type :message-id:sender:precedence:x-google-loop:mailing-list:list-id :list-post:list-help:list-unsubscribe:x-beenthere-env:x-beenthere; bh=WaxoWZZp7j6ofouMO3KS22wodu7eUWHVtFlMSvo0/mM=; b=i8zBxO4UvS80/icccxdGaDHW1abM923AYuq+MTc9p+gLHKBJvqEh/xldKcI6ANIiTF wqeSTRoiue5kbhqg/OxL1MMLc0qTEpX81Usk7+rIkC3JyU0U8PATN+kGX43BUxkapj6+ nTuL7t3s2ixHSyj2MVL+TloqAsAf90od+TG9k= DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlegroups.com; s=beta; h=x-sender:x-apparently-to:received-spf:domainkey-status :authentication-results:domainkey-signature:x-ymail-osg :x-yahoo-newman-property:from:reply-to:to:subject:date:user-agent:cc :references:in-reply-to:mime-version:content-type:message-id:sender :precedence:x-google-loop:mailing-list:list-id:list-post:list-help :list-unsubscribe:x-beenthere-env:x-beenthere; b=fSjXlf+nAwzwLae3vs3YT/XkLeqra+/7zu71OKuLePPcFlhsh0BhSxcnFM9ZVAkjat aTlp7xLg/Hleh52wLzPluJBaB2qoR6w17YGDiaMcPYrbcKxixjmbQ3Rx70Kau9w5Ljjz knPmi/hUrLvPer4o23YVXdC8vU9qbY+pwIiS8= Received: by 10.142.224.5 with SMTP id w5mr95082wfg.22.1227148107542; Wed, 19 Nov 2008 18:28:27 -0800 (PST) Received: by 10.106.144.6 with SMTP id r6gr1652prd.0; Wed, 19 Nov 2008 18:28:27 -0800 (PST) X-Sender: david-b@pacbell.net X-Apparently-To: rtc-linux@googlegroups.com Received: by 10.114.77.1 with SMTP id z1mr832189waa.23.1227148107273; Wed, 19 Nov 2008 18:28:27 -0800 (PST) Received: from smtp124.sbc.mail.sp1.yahoo.com (smtp124.sbc.mail.sp1.yahoo.com [69.147.64.97]) by mx.google.com with SMTP id k32si385685wah.1.2008.11.19.18.28.26; Wed, 19 Nov 2008 18:28:26 -0800 (PST) Received-SPF: neutral (google.com: 69.147.64.97 is neither permitted nor denied by domain of david-b@pacbell.net) client-ip=69.147.64.97; DomainKey-Status: good (test mode) Authentication-Results: mx.google.com; spf=neutral (google.com: 69.147.64.97 is neither permitted nor denied by domain of david-b@pacbell.net) smtp.mail=david-b@pacbell.net; domainkeys=pass (test mode) header.From=david-b@pacbell.net Received: (qmail 24971 invoked from network); 20 Nov 2008 02:28:25 -0000 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=pacbell.net; h=Received:X-YMail-OSG:X-Yahoo-Newman-Property:From:Reply-To:To:Subject:Date:User-Agent:Cc:References:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding:Content-Disposition:Message-Id; b=zh0XuWmeBEIwX8PjrZfUcwaebrB653KimtZZKJaGk8vPD+tvjsKwLJ0OsS/OAJfPrM7dZgA0m0TizEpRcb9pC3F2PYvwAmTyiQlxrJQW8PCevbS01NVmGpwgUKjR/A+rCOBCkj7QnOQLmAcHoD7U+31P/yD49uwNox/bCU4eegk= ; Received: from unknown (HELO pogo.local) (david-b@69.226.222.107 with plain) by smtp124.sbc.mail.sp1.yahoo.com with SMTP; 20 Nov 2008 02:28:25 -0000 X-YMail-OSG: KPDc.KkVM1mTlMtMs4nIYkr9gZFFjYWreZ8jh5E9VFqWG3Pbudt6C9T1bzXFw_B6HZSp_D5x0boWZ5MVH2nL6UKUjXI6N44EllF05tsb_lQRyJTYO08RfnBJk0jzkg.rMQugE4yxnKvTN_QbHHPzEVWQAwccSwG37SSlhTexPgKtI3ESVq5hn19kQw.k X-Yahoo-Newman-Property: ymail-3 From: David Brownell Reply-To: rtc-linux@googlegroups.com To: Alessandro Zummo Subject: [rtc-linux] Re: [RFC PATCH] rtc: tw4030 add alarm/update interfaces Date: Wed, 19 Nov 2008 18:28:23 -0800 User-Agent: KMail/1.9.10 Cc: rtc-linux@googlegroups.com, Tony Lindgren , Samuel Ortiz References: <20081117005817.22724.98638.stgit@i1501.lan.towertech.it> In-Reply-To: <20081117005817.22724.98638.stgit@i1501.lan.towertech.it> Mime-Version: 1.0 Message-Id: <200811191828.24087.david-b@pacbell.net> Sender: rtc-linux@googlegroups.com Precedence: bulk X-Google-Loop: groups Mailing-List: list rtc-linux@googlegroups.com; contact rtc-linux+owner@googlegroups.com List-Id: List-Post: List-Help: List-Unsubscribe: , X-BeenThere-Env: rtc-linux@googlegroups.com X-BeenThere: rtc-linux@googlegroups.com From: Alessandro Zummo Changes: - implement alarm_irq_enable - return correct error code when registering fails [ dbrownell@users.sourceforge.net: build fixes, force 1/sec irqs] Signed-off-by: Alessandro Zummo Signed-off-by: David Brownell Cc: Tony Lindgren Cc: Samuel Ortiz --- Requires a bugfix to the alarm/update interface patch in -mm. drivers/rtc/rtc-twl4030.c | 44 ++++++++++---------------------------------- 1 file changed, 10 insertions(+), 34 deletions(-) --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to "rtc-linux". Membership options at http://groups.google.com/group/rtc-linux . Please read http://groups.google.com/group/rtc-linux/web/checklist before submitting a driver. -~----------~----~----~----~------~----~------~--~--- --- a/drivers/rtc/rtc-twl4030.c +++ b/drivers/rtc/rtc-twl4030.c @@ -119,7 +119,7 @@ static int twl4030_rtc_write_u8(u8 data, static unsigned char rtc_irq_bits; /* - * Enable timer and/or alarm interrupts. + * Enable 1/second update and/or alarm interrupts. */ static int set_rtc_irq_bit(unsigned char bit) { @@ -127,6 +127,7 @@ static int set_rtc_irq_bit(unsigned char int ret; val = rtc_irq_bits | bit; + val &= ~BIT_RTC_INTERRUPTS_REG_EVERY_M; ret = twl4030_rtc_write_u8(val, REG_RTC_INTERRUPTS_REG); if (ret == 0) rtc_irq_bits = val; @@ -135,7 +136,7 @@ static int set_rtc_irq_bit(unsigned char } /* - * Disable timer and/or alarm interrupts. + * Disable update and/or alarm interrupts. */ static int mask_rtc_irq_bit(unsigned char bit) { @@ -150,7 +151,7 @@ static int mask_rtc_irq_bit(unsigned cha return ret; } -static inline int twl4030_rtc_alarm_irq_set_state(int enabled) +static int twl4030_rtc_alarm_irq_enable(struct device *dev, unsigned enabled) { int ret; @@ -162,7 +163,7 @@ static inline int twl4030_rtc_alarm_irq_ return ret; } -static inline int twl4030_rtc_irq_set_state(int enabled) +static int twl4030_rtc_update_irq_enable(struct device *dev, unsigned enabled) { int ret; @@ -291,7 +292,7 @@ static int twl4030_rtc_set_alarm(struct unsigned char alarm_data[ALL_TIME_REGS + 1]; int ret; - ret = twl4030_rtc_alarm_irq_set_state(0); + ret = twl4030_rtc_alarm_irq_enable(dev, 0); if (ret) goto out; @@ -311,35 +312,11 @@ static int twl4030_rtc_set_alarm(struct } if (alm->enabled) - ret = twl4030_rtc_alarm_irq_set_state(1); + ret = twl4030_rtc_alarm_irq_enable(dev, 1); out: return ret; } -#ifdef CONFIG_RTC_INTF_DEV - -static int twl4030_rtc_ioctl(struct device *dev, unsigned int cmd, - unsigned long arg) -{ - switch (cmd) { - case RTC_AIE_OFF: - return twl4030_rtc_alarm_irq_set_state(0); - case RTC_AIE_ON: - return twl4030_rtc_alarm_irq_set_state(1); - case RTC_UIE_OFF: - return twl4030_rtc_irq_set_state(0); - case RTC_UIE_ON: - return twl4030_rtc_irq_set_state(1); - - default: - return -ENOIOCTLCMD; - } -} - -#else -#define omap_rtc_ioctl NULL -#endif - static irqreturn_t twl4030_rtc_interrupt(int irq, void *rtc) { unsigned long events = 0; @@ -399,11 +376,12 @@ out: } static struct rtc_class_ops twl4030_rtc_ops = { - .ioctl = twl4030_rtc_ioctl, .read_time = twl4030_rtc_read_time, .set_time = twl4030_rtc_set_time, .read_alarm = twl4030_rtc_read_alarm, .set_alarm = twl4030_rtc_set_alarm, + .alarm_irq_enable = twl4030_rtc_alarm_irq_enable, + .update_irq_enable = twl4030_rtc_update_irq_enable, }; /*----------------------------------------------------------------------*/ @@ -421,7 +399,7 @@ static int __devinit twl4030_rtc_probe(s rtc = rtc_device_register(pdev->name, &pdev->dev, &twl4030_rtc_ops, THIS_MODULE); if (IS_ERR(rtc)) { - ret = -EINVAL; + ret = PTR_ERR(rtc); dev_err(&pdev->dev, "can't register RTC device, err %ld\n", PTR_ERR(rtc)); goto out0; @@ -431,7 +409,6 @@ static int __devinit twl4030_rtc_probe(s platform_set_drvdata(pdev, rtc); ret = twl4030_rtc_read_u8(&rd_reg, REG_RTC_STATUS_REG); - if (ret < 0) goto out1; @@ -474,7 +451,6 @@ static int __devinit twl4030_rtc_probe(s return ret; - out2: free_irq(irq, rtc); out1: