From patchwork Tue Apr 14 09:11:55 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Juergen Borleis X-Patchwork-Id: 461106 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from mail-wg0-x239.google.com (mail-wg0-x239.google.com [IPv6:2a00:1450:400c:c00::239]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id EBA861402C6 for ; Tue, 14 Apr 2015 19:12:03 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass reason="2048-bit key; unprotected key" header.d=googlegroups.com header.i=@googlegroups.com header.b=aD47Gm8f; dkim-adsp=none (unprotected policy); dkim-atps=neutral Received: by wggy19 with SMTP id y19sf950224wgg.1 for ; Tue, 14 Apr 2015 02:12:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20120806; h=mime-version:from:to:cc:subject:date:message-id:in-reply-to :references:x-original-sender:x-original-authentication-results :reply-to:content-type:precedence:mailing-list:list-id:list-post :list-help:list-archive:sender:list-subscribe:list-unsubscribe; bh=g6VqCVSZdrpuG7UqfiHBhK43xWanvRXst++EUe4Xs98=; b=aD47Gm8fXQ6K4NZbOweE7ZoJBbJBD5PP2hgXs4/HCnO8NGiHhTTd+r8CwRD24A3JrY pV5BTM6X+xyzF8SDNxhPkl6iEWdAIsg6rHdLx7ztLAC8l1DUdOnHc77RxJ3K0N5rw8Lu +GIJBkSRRhl/ZtKx10jg7nhD8EONcpF2XpkfuuHl6XqgpKko1XaGlHFvUcsudr4iMBTw sjAu24a1yC/XlqAX4Tn1Ie2tZhCF83W1T4dWUQkWu347UaQdLSQYIGoW3NYXXg45UqDA zvWGgdykc1C5UEsbps3OLf22JvBahn9DdA4rCCRKA4ds1dgyppTdr6Q6nPIz0aeGhicD rKUQ== X-Received: by 10.180.91.137 with SMTP id ce9mr102559wib.13.1429002721240; Tue, 14 Apr 2015 02:12:01 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: rtc-linux@googlegroups.com Received: by 10.181.12.83 with SMTP id eo19ls84076wid.27.gmail; Tue, 14 Apr 2015 02:12:00 -0700 (PDT) X-Received: by 10.194.236.230 with SMTP id ux6mr2567467wjc.5.1429002720939; Tue, 14 Apr 2015 02:12:00 -0700 (PDT) Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de. [2001:6f8:1178:4:290:27ff:fe1d:cc33]) by gmr-mx.google.com with ESMTPS id ec7si57257wib.3.2015.04.14.02.12.00 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Tue, 14 Apr 2015 02:12:00 -0700 (PDT) Received-SPF: none (google.com: jbe@pengutronix.de does not designate permitted sender hosts) client-ip=2001:6f8:1178:4:290:27ff:fe1d:cc33; Received: from dude.hi.pengutronix.de ([2001:67c:670:100:1d::7]) by metis.ext.pengutronix.de with esmtp (Exim 4.80) (envelope-from ) id 1Yhwsy-0004fV-3I; Tue, 14 Apr 2015 11:12:00 +0200 Received: from jbe by dude.hi.pengutronix.de with local (Exim 4.84) (envelope-from ) id 1Yhwsx-0005c1-IS; Tue, 14 Apr 2015 11:11:59 +0200 From: Juergen Borleis To: linux-kernel@vger.kernel.org Cc: rtc-linux@googlegroups.com, kernel@pengutronix.de, Alessandro Zummo , linux-arm-kernel@lists.infradead.org, Robert Schwebel Subject: [rtc-linux] [PATCH 4/5] RTC/i.MX/DryIce: when locked, do not fail silently Date: Tue, 14 Apr 2015 11:11:55 +0200 Message-Id: <1429002716-19821-5-git-send-email-jbe@pengutronix.de> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1429002716-19821-1-git-send-email-jbe@pengutronix.de> References: <1429002716-19821-1-git-send-email-jbe@pengutronix.de> X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::7 X-SA-Exim-Mail-From: jbe@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: rtc-linux@googlegroups.com X-Original-Sender: jbe@pengutronix.de X-Original-Authentication-Results: gmr-mx.google.com; spf=none (google.com: jbe@pengutronix.de does not designate permitted sender hosts) smtp.mail=jbe@pengutronix.de 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: , List-Unsubscribe: , Signed-off-by: Juergen Borleis Signed-off-by: Robert Schwebel [rsc: got NDA clearance from Freescale] --- drivers/rtc/rtc-imxdi.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/drivers/rtc/rtc-imxdi.c b/drivers/rtc/rtc-imxdi.c index b04c64f..de1a2e4 100644 --- a/drivers/rtc/rtc-imxdi.c +++ b/drivers/rtc/rtc-imxdi.c @@ -581,14 +581,36 @@ static int dryice_rtc_read_time(struct device *dev, struct rtc_time *tm) static int dryice_rtc_set_mmss(struct device *dev, unsigned long secs) { struct imxdi_dev *imxdi = dev_get_drvdata(dev); + u32 dcr, dsr; int rc; + dcr = __raw_readl(imxdi->ioaddr + DCR); + dsr = __raw_readl(imxdi->ioaddr + DSR); + + if (!(dcr & DCR_TCE) || (dsr & DSR_SVF)) { + if (dcr & DCR_TCHL) { + /* we are even more out of luck */ + di_what_is_to_be_done(imxdi, "battery"); + return -EPERM; + } + if ((dcr & DCR_TCSL) || (dsr & DSR_SVF)) { + /* we are out of luck for now */ + di_what_is_to_be_done(imxdi, "main"); + return -EPERM; + } + } + /* zero the fractional part first */ rc = di_write_wait(imxdi, 0, DTCLR); - if (rc == 0) - rc = di_write_wait(imxdi, secs, DTCMR); + if (rc != 0) + return rc; - return rc; + rc = di_write_wait(imxdi, secs, DTCMR); + if (rc != 0) + return rc; + + return di_write_wait(imxdi, __raw_readl(imxdi->ioaddr + DCR) | + DCR_TCE, DCR); } static int dryice_rtc_alarm_irq_enable(struct device *dev,