From patchwork Tue Aug 17 04:44:08 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Frysinger X-Patchwork-Id: 61855 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from mail-px0-f184.google.com (mail-px0-f184.google.com [209.85.212.184]) by ozlabs.org (Postfix) with ESMTP id CF22EB70A8 for ; Tue, 17 Aug 2010 14:44:05 +1000 (EST) Received: by pxi2 with SMTP id 2sf1082257pxi.11 for ; Mon, 16 Aug 2010 21:44:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=beta; h=domainkey-signature:received:mime-version:x-beenthere:received :received:received:received:received-spf:received:from:to:cc:subject :date:message-id:x-mailer:in-reply-to:references:x-original-sender :x-original-authentication-results:reply-to:precedence:mailing-list :list-id:list-post:list-help:list-archive:sender:list-subscribe :list-unsubscribe:content-type; bh=36+VtfPYnhf34DWWeN1O+eTJL4ic5RP9/lOiUtlP5l8=; b=RHXc6vA83LL8cA1QPb+EFWsSAUJeMTpD8dPWkuKyLXmd8bib1jcVZaL67VaMRlnTpB GMlecH7phsbD81BNOoIW3RrXVM2Tlv2QdIc0zYh29QLZiRAbEmW4WeYGBrnCjYJOofje Z9DfgDg4MFtv5FZjPM3WnWCHDWJ0XeoMG0ouM= DomainKey-Signature: a=rsa-sha1; c=nofws; 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-original-sender :x-original-authentication-results:reply-to:precedence:mailing-list :list-id:list-post:list-help:list-archive:sender:list-subscribe :list-unsubscribe:content-type; b=uQ6HwH2T1VToKwteGV09UkYyz3w95CzZc0nirT+kV3z4mUKx7Ly6HqkLBRwtX7AW/o ojCb1nVMwOUEsttFutaZB+sBg9rPMHcQMJs9N/mD0Bsx7R/gUcJnPqYuZ3QY/0ZxcLc+ kh4NT2oi3rhCNV+8p2Z5ESI2Vxg/LMgFR6chc= Received: by 10.115.99.13 with SMTP id b13mr405986wam.29.1282020244373; Mon, 16 Aug 2010 21:44:04 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: rtc-linux@googlegroups.com Received: by 10.115.85.40 with SMTP id n40ls4920937wal.0.p; Mon, 16 Aug 2010 21:44:03 -0700 (PDT) Received: by 10.114.26.16 with SMTP id 16mr1714572waz.10.1282020243808; Mon, 16 Aug 2010 21:44:03 -0700 (PDT) Received: by 10.114.26.16 with SMTP id 16mr1714570waz.10.1282020243780; Mon, 16 Aug 2010 21:44:03 -0700 (PDT) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by gmr-mx.google.com with ESMTP id k37si9490374wae.2.2010.08.16.21.44.03; Mon, 16 Aug 2010 21:44:03 -0700 (PDT) Received-SPF: pass (google.com: domain of vapier@gentoo.org designates 140.211.166.183 as permitted sender) client-ip=140.211.166.183; Received: from vapier-m.hsd1.ma.comcast.net. (localhost [127.0.0.1]) by smtp.gentoo.org (Postfix) with ESMTP id 272C11B40F1; Tue, 17 Aug 2010 04:44:03 +0000 (UTC) From: Mike Frysinger To: rtc-linux@googlegroups.com, Alessandro Zummo Cc: uclinux-dist-devel@blackfin.uclinux.org, Andrew Morton Subject: [rtc-linux] [PATCH 3/4] rtc-bfin: shrink/optimize interrupt handler a bit Date: Tue, 17 Aug 2010 00:44:08 -0400 Message-Id: <1282020249-8807-3-git-send-email-vapier@gentoo.org> X-Mailer: git-send-email 1.7.2 In-Reply-To: <1282020249-8807-1-git-send-email-vapier@gentoo.org> References: <1282020249-8807-1-git-send-email-vapier@gentoo.org> X-Original-Sender: vapier@gentoo.org X-Original-Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of vapier@gentoo.org designates 140.211.166.183 as permitted sender) smtp.mail=vapier@gentoo.org Reply-To: rtc-linux@googlegroups.com Precedence: list Mailing-list: list rtc-linux@googlegroups.com; contact rtc-linux+owners@googlegroups.com List-ID: List-Post: , List-Help: , List-Archive: Sender: rtc-linux@googlegroups.com List-Subscribe: , List-Unsubscribe: , By unifying the RTC_ISTAT clearing steps, we shrink the interrupt handler and avoid multiple writes to the hardware registers. Signed-off-by: Mike Frysinger --- drivers/rtc/rtc-bfin.c | 27 ++++++++++++++++----------- 1 files changed, 16 insertions(+), 11 deletions(-) diff --git a/drivers/rtc/rtc-bfin.c b/drivers/rtc/rtc-bfin.c index d4fb82d..3506f33 100644 --- a/drivers/rtc/rtc-bfin.c +++ b/drivers/rtc/rtc-bfin.c @@ -183,29 +183,33 @@ static irqreturn_t bfin_rtc_interrupt(int irq, void *dev_id) struct bfin_rtc *rtc = dev_get_drvdata(dev); unsigned long events = 0; bool write_complete = false; - u16 rtc_istat, rtc_ictl; + u16 rtc_istat, rtc_istat_clear, rtc_ictl, bits; dev_dbg_stamp(dev); rtc_istat = bfin_read_RTC_ISTAT(); rtc_ictl = bfin_read_RTC_ICTL(); + rtc_istat_clear = 0; - if (rtc_istat & RTC_ISTAT_WRITE_COMPLETE) { - bfin_write_RTC_ISTAT(RTC_ISTAT_WRITE_COMPLETE); + bits = RTC_ISTAT_WRITE_COMPLETE; + if (rtc_istat & bits) { + rtc_istat_clear |= bits; write_complete = true; complete(&bfin_write_complete); } - if (rtc_ictl & (RTC_ISTAT_ALARM | RTC_ISTAT_ALARM_DAY)) { - if (rtc_istat & (RTC_ISTAT_ALARM | RTC_ISTAT_ALARM_DAY)) { - bfin_write_RTC_ISTAT(RTC_ISTAT_ALARM | RTC_ISTAT_ALARM_DAY); + bits = (RTC_ISTAT_ALARM | RTC_ISTAT_ALARM_DAY); + if (rtc_ictl & bits) { + if (rtc_istat & bits) { + rtc_istat_clear |= bits; events |= RTC_AF | RTC_IRQF; } } - if (rtc_ictl & RTC_ISTAT_SEC) { - if (rtc_istat & RTC_ISTAT_SEC) { - bfin_write_RTC_ISTAT(RTC_ISTAT_SEC); + bits = RTC_ISTAT_SEC; + if (rtc_ictl & bits) { + if (rtc_istat & bits) { + rtc_istat_clear |= bits; events |= RTC_UF | RTC_IRQF; } } @@ -213,9 +217,10 @@ static irqreturn_t bfin_rtc_interrupt(int irq, void *dev_id) if (events) rtc_update_irq(rtc->rtc_dev, 1, events); - if (write_complete || events) + if (write_complete || events) { + bfin_write_RTC_ISTAT(rtc_istat_clear); return IRQ_HANDLED; - else + } else return IRQ_NONE; }