From patchwork Fri Mar 4 18:56:11 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Michael_B=C3=BCsch?= X-Patchwork-Id: 592183 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from mail-wm0-x238.google.com (mail-wm0-x238.google.com [IPv6:2a00:1450:400c:c09::238]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3AC4C140187 for ; Sat, 5 Mar 2016 06:03:42 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.b=fK1gUNJ+; dkim-atps=neutral Received: by mail-wm0-x238.google.com with SMTP id n186sf1132402wmn.0 for ; Fri, 04 Mar 2016 11:03:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20120806; h=date:from:to:cc:subject:message-id:in-reply-to:references :mime-version:x-original-sender:x-original-authentication-results :reply-to:precedence:mailing-list:list-id:x-spam-checked-in-group :list-post:list-help:list-archive:sender:list-subscribe :list-unsubscribe; bh=3gyq2Qc1SbQUkLNoflvAK5iFH2R881kyNJ5NZfxBzX8=; b=fK1gUNJ+Q0mBaSOOJneIzSpqeKBdWMTThU6oBCZtftzqOTqk2hweiVYIT2zkBOb8pp Zm1r0S5TfvfukHOUk3kpdHpdQdNku8B4kSwawpksCt4bCRA/92x3otJmclW+P032jP/t G6o/08xQapepSWITyn+kUkDQFjbaohxhAN/wFg70OG/YpuS4rcHZk7B/WxoyY1yiHafA Vy1oPedXxZsX/juw+rJwNCyT5J9obn0BL5WMezvNKb6ez22ytUefgKyVMm9DzkKT9NOJ 1QTTWGKxzngS5ZP2Il4U9hZUYAzoACpaxeXAIEW7nRqMTEZe0exq3bsxAYKPCh9lameH 4ROQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:message-id:in-reply-to :references:mime-version:x-original-sender :x-original-authentication-results:reply-to:precedence:mailing-list :list-id:x-spam-checked-in-group:list-post:list-help:list-archive :sender:list-subscribe:list-unsubscribe; bh=3gyq2Qc1SbQUkLNoflvAK5iFH2R881kyNJ5NZfxBzX8=; b=KG/YqG+KG6bdzLHg09NPn+PE8xMPnIq4B7C0+M9dzwa0Xy0F885XqOPPGH13ZeRzVo QeaDO/gMSe8fpRiJhso1RzJCYhkVlc1hB6k2jLVeUIxRdi2Dl/qBdlpoeEAaecphC8Ql kQqxrrIVcDRBFEsPJhfXsPB8TTokrctqeYqt/qnTJy2ooXNVlarV3kaAb9NWTFYdWYJ6 ixXITLfTTLGQFSBRBapYePJOY6cCo7tfg2nCXPgOBdQ1c/y9DaZ+d6rP7Zx3IkTNdYzF FenC4QUAKYIjuv/K8nQR38//3piGB+nWvNOu/FuLniJnU1CCbNz+x9hvQ3QL9pw9zvlj xkOw== X-Gm-Message-State: AD7BkJIG9KeTYRQYgXfLxmUJwIubuJ5HJoW5+JbBzoG90c0McOqYkAf5w42Sq7dVW+wjBw== X-Received: by 10.28.46.216 with SMTP id u207mr2978wmu.12.1457118219661; Fri, 04 Mar 2016 11:03:39 -0800 (PST) X-BeenThere: rtc-linux@googlegroups.com Received: by 10.28.210.147 with SMTP id j141ls242817wmg.40.canary; Fri, 04 Mar 2016 11:03:39 -0800 (PST) X-Received: by 10.28.15.82 with SMTP id 79mr57275wmp.3.1457118219224; Fri, 04 Mar 2016 11:03:39 -0800 (PST) Received: from bues.ch (bues.ch. [2a01:138:9005::1:4]) by gmr-mx.google.com with ESMTPS id m72si8489wma.3.2016.03.04.11.03.39 for (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 04 Mar 2016 11:03:39 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of m@bues.ch designates 2a01:138:9005::1:4 as permitted sender) client-ip=2a01:138:9005::1:4; Received: by bues.ch with esmtpsa (Exim 4.80) (envelope-from ) id 1abv0k-0000qr-OR; Fri, 04 Mar 2016 20:03:38 +0100 Date: Fri, 4 Mar 2016 19:56:11 +0100 From: Michael =?UTF-8?B?QsO8c2No?= To: Alexandre Belloni Cc: Gregory Hermant , rtc-linux@googlegroups.com Subject: [rtc-linux] [PATCH 4/6] rtc-rv3029: Add i2c register update-bits helper Message-ID: <20160304195611.48d5177b@wiggum> In-Reply-To: <20160304195337.51439645@wiggum> References: <20160301213322.661fe771@wiggum> <20160301213655.GG23985@piout.net> <20160301225401.3f0aeabb@wiggum> <20160301230745.GJ23985@piout.net> <20160302072627.14e53e94@wiggum> <20160302120045.GO23985@piout.net> <20160304195337.51439645@wiggum> X-Mailer: Claws Mail 3.13.2 (GTK+ 2.24.29; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-Original-Sender: m@bues.ch X-Original-Authentication-Results: gmr-mx.google.com; spf=pass (google.com: best guess record for domain of m@bues.ch designates 2a01:138:9005::1:4 as permitted sender) smtp.mailfrom=m@bues.ch Reply-To: rtc-linux@googlegroups.com Precedence: list Mailing-list: list rtc-linux@googlegroups.com; contact rtc-linux+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: rtc-linux@googlegroups.com X-Google-Group-Id: 712029733259 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , This simplifies mask/set operations on device I2C registers. Signed-off-by: Michael Buesch --- drivers/rtc/rtc-rv3029c2.c | 54 ++++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/drivers/rtc/rtc-rv3029c2.c b/drivers/rtc/rtc-rv3029c2.c index 29cc871..769f73a 100644 --- a/drivers/rtc/rtc-rv3029c2.c +++ b/drivers/rtc/rtc-rv3029c2.c @@ -2,6 +2,7 @@ * Micro Crystal RV-3029 rtc class driver * * Author: Gregory Hermant + * Michael Buesch * * based on previously existing rtc class drivers * @@ -143,6 +144,24 @@ rv3029_i2c_write_regs(struct i2c_client *client, u8 reg, u8 const buf[], } static int +rv3029_i2c_update_bits(struct i2c_client *client, u8 reg, u8 mask, u8 set) +{ + u8 buf; + int ret; + + ret = rv3029_i2c_read_regs(client, reg, &buf, 1); + if (ret < 0) + return ret; + buf &= mask; + buf |= set; + ret = rv3029_i2c_write_regs(client, reg, &buf, 1); + if (ret < 0) + return ret; + + return 0; +} + +static int rv3029_i2c_get_sr(struct i2c_client *client, u8 *buf) { int ret = rv3029_i2c_read_regs(client, RV3029_STATUS, buf, 1); @@ -260,22 +279,13 @@ static int rv3029_rtc_i2c_alarm_set_irq(struct i2c_client *client, int enable) { int ret; - u8 buf[1]; - - /* enable AIE irq */ - ret = rv3029_i2c_read_regs(client, RV3029_IRQ_CTRL, buf, 1); - if (ret < 0) { - dev_err(&client->dev, "can't read INT reg\n"); - return ret; - } - if (enable) - buf[0] |= RV3029_IRQ_CTRL_AIE; - else - buf[0] &= ~RV3029_IRQ_CTRL_AIE; - ret = rv3029_i2c_write_regs(client, RV3029_IRQ_CTRL, buf, 1); + /* enable/disable AIE irq */ + ret = rv3029_i2c_update_bits(client, RV3029_IRQ_CTRL, + (u8)~RV3029_IRQ_CTRL_AIE, + (enable ? RV3029_IRQ_CTRL_AIE : 0)); if (ret < 0) { - dev_err(&client->dev, "can't set INT reg\n"); + dev_err(&client->dev, "can't update INT reg\n"); return ret; } @@ -316,20 +326,11 @@ static int rv3029_rtc_i2c_set_alarm(struct i2c_client *client, return ret; if (alarm->enabled) { - u8 buf[1]; - /* clear AF flag */ - ret = rv3029_i2c_read_regs(client, RV3029_IRQ_FLAGS, - buf, 1); - if (ret < 0) { - dev_err(&client->dev, "can't read alarm flag\n"); - return ret; - } - buf[0] &= ~RV3029_IRQ_FLAGS_AF; - ret = rv3029_i2c_write_regs(client, RV3029_IRQ_FLAGS, - buf, 1); + ret = rv3029_i2c_update_bits(client, RV3029_IRQ_FLAGS, + (u8)~RV3029_IRQ_FLAGS_AF, 0); if (ret < 0) { - dev_err(&client->dev, "can't set alarm flag\n"); + dev_err(&client->dev, "can't clear alarm flag\n"); return ret; } /* enable AIE irq */ @@ -454,5 +455,6 @@ static struct i2c_driver rv3029_driver = { module_i2c_driver(rv3029_driver); MODULE_AUTHOR("Gregory Hermant "); +MODULE_AUTHOR("Michael Buesch "); MODULE_DESCRIPTION("Micro Crystal RV3029 RTC driver"); MODULE_LICENSE("GPL");