From patchwork Mon Jun 5 15:57:29 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 771312 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3whKGd4yxHz9s2G for ; Tue, 6 Jun 2017 01:58:01 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="fHMCJOQU"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751183AbdFEP56 (ORCPT ); Mon, 5 Jun 2017 11:57:58 -0400 Received: from mail-wr0-f196.google.com ([209.85.128.196]:32978 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751171AbdFEP56 (ORCPT ); Mon, 5 Jun 2017 11:57:58 -0400 Received: by mail-wr0-f196.google.com with SMTP id v104so7873356wrb.0 for ; Mon, 05 Jun 2017 08:57:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:subject:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding; bh=RjphMCT20xM/EUL2gOMM6PlEPZi2GXjjUbIB/t0RnTc=; b=fHMCJOQULOQET0Di4h7PvflzFZFNcBwppNJDMRTdKE5kMoX98e+fLRTMEOSuc6mlyk FbWBUDH52EG+mdtB+k94zIt9DVAQeGL3ytkeie5z9XF1WIUJBMMMlCzDcxm1zJ/yTizb dHABgz2slNipAX09z8KjfW30N8Itho/86Gucdp3fr6X3dHfVzFVIGy1W7MDkn12Tq7mr YI0UxQd7ubejp1TX0Rt29oSNZaVijpA168A7H+gQ1u/G9E7lzL91Dwprs8ePc4fX9s2r czSzCCuzc9IrRDFiV9BCMLJ/+e3u8T7Q+IyTPZF2xYX8zBD3CSrUq40w11D4brfq7qCz wZQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:subject:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding; bh=RjphMCT20xM/EUL2gOMM6PlEPZi2GXjjUbIB/t0RnTc=; b=EBXDesAi/gPhiPXIB0rKzVS/u7JRi6J9Ym2HpeUNa9GdTUwW6AIyTWsqHOXFgDnZ6x scI+Mse2QQuG7fxTk1ajF/pklTJHpjMnPBEhMO1ydzVCkoP1+FQmklBnTUDwzXey5Dtf 45I1XZuZbsybJDPOVKeOv65PvydlSmGfaKDJmq5HPXfDpY8VpiXTnjpYlSozLhl6VnO7 cKlEXY8KitpSqFtgRxI/fxCDy+oUCapuPeGQRQL//BjstNAL0q8vqZLqDlAGJRNGh9JY O0BUzclJS+KZ8QUn4Egnm7/4dygWVbJC/McIX2TcYvRYREJ/rTd8y/MnME8ZrFGY9SPO lAzQ== X-Gm-Message-State: AODbwcB2MkdgfLedvFezKjFXI+0VvTFaR657hQxGA2oeTJidSIGk1uz1 oQxOTx+VqvigsIn6 X-Received: by 10.223.152.196 with SMTP id w62mr14343285wrb.118.1496678271301; Mon, 05 Jun 2017 08:57:51 -0700 (PDT) Received: from ?IPv6:2003:c6:ebdd:1100:2db5:8b57:1b5a:9b07? (p200300C6EBDD11002DB58B571B5A9B07.dip0.t-ipconnect.de. [2003:c6:ebdd:1100:2db5:8b57:1b5a:9b07]) by smtp.googlemail.com with ESMTPSA id q98sm33715586wrb.3.2017.06.05.08.57.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 05 Jun 2017 08:57:50 -0700 (PDT) From: Heiner Kallweit Subject: [PATCH v3 2/4] rtc: ds1307: use regmap_update_bits where applicable To: Alexandre Belloni Cc: linux-rtc@vger.kernel.org References: Message-ID: Date: Mon, 5 Jun 2017 17:57:29 +0200 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.1.1 MIME-Version: 1.0 In-Reply-To: Sender: linux-rtc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rtc@vger.kernel.org After the switch to regmap we can now make use of regmap_update_bits to simplify read/modify/write ops. Signed-off-by: Heiner Kallweit Reviewed-by: Linus Walleij --- v2: - no changes v3: - add Reviewed-by --- drivers/rtc/rtc-ds1307.c | 82 ++++++++++++------------------------------------ 1 file changed, 20 insertions(+), 62 deletions(-) diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c index b960ec3f..bf906e9f 100644 --- a/drivers/rtc/rtc-ds1307.c +++ b/drivers/rtc/rtc-ds1307.c @@ -247,7 +247,7 @@ static irqreturn_t ds1307_irq(int irq, void *dev_id) { struct ds1307 *ds1307 = dev_id; struct mutex *lock = &ds1307->rtc->ops_lock; - int stat, control, ret; + int stat, ret; mutex_lock(lock); ret = regmap_read(ds1307->regmap, DS1337_REG_STATUS, &stat); @@ -258,13 +258,11 @@ static irqreturn_t ds1307_irq(int irq, void *dev_id) stat &= ~DS1337_BIT_A1I; regmap_write(ds1307->regmap, DS1337_REG_STATUS, stat); - ret = regmap_read(ds1307->regmap, DS1337_REG_CONTROL, &control); + ret = regmap_update_bits(ds1307->regmap, DS1337_REG_CONTROL, + DS1337_BIT_A1IE, 0); if (ret) goto out; - control &= ~DS1337_BIT_A1IE; - regmap_write(ds1307->regmap, DS1337_REG_CONTROL, control); - rtc_update_irq(ds1307->rtc, 1, RTC_AF | RTC_IRQF); } @@ -517,21 +515,13 @@ static int ds1337_set_alarm(struct device *dev, struct rtc_wkalrm *t) static int ds1307_alarm_irq_enable(struct device *dev, unsigned int enabled) { struct ds1307 *ds1307 = dev_get_drvdata(dev); - int control, ret; if (!test_bit(HAS_ALARM, &ds1307->flags)) return -ENOTTY; - ret = regmap_read(ds1307->regmap, DS1337_REG_CONTROL, &control); - if (ret) - return ret; - - if (enabled) - control |= DS1337_BIT_A1IE; - else - control &= ~DS1337_BIT_A1IE; - - return regmap_write(ds1307->regmap, DS1337_REG_CONTROL, control); + return regmap_update_bits(ds1307->regmap, DS1337_REG_CONTROL, + DS1337_BIT_A1IE, + enabled ? DS1337_BIT_A1IE : 0); } static const struct rtc_class_ops ds13xx_rtc_ops = { @@ -586,11 +576,8 @@ static irqreturn_t mcp794xx_irq(int irq, void *dev_id) goto out; /* Disable alarm 0. */ - ret = regmap_read(ds1307->regmap, MCP794XX_REG_CONTROL, ®); - if (ret) - goto out; - reg &= ~MCP794XX_BIT_ALM0_EN; - ret = regmap_write(ds1307->regmap, MCP794XX_REG_CONTROL, reg); + ret = regmap_update_bits(ds1307->regmap, MCP794XX_REG_CONTROL, + MCP794XX_BIT_ALM0_EN, 0); if (ret) goto out; @@ -688,21 +675,13 @@ static int mcp794xx_set_alarm(struct device *dev, struct rtc_wkalrm *t) static int mcp794xx_alarm_irq_enable(struct device *dev, unsigned int enabled) { struct ds1307 *ds1307 = dev_get_drvdata(dev); - int reg, ret; if (!test_bit(HAS_ALARM, &ds1307->flags)) return -EINVAL; - ret = regmap_read(ds1307->regmap, MCP794XX_REG_CONTROL, ®); - if (ret) - return ret; - - if (enabled) - reg |= MCP794XX_BIT_ALM0_EN; - else - reg &= ~MCP794XX_BIT_ALM0_EN; - - return regmap_write(ds1307->regmap, MCP794XX_REG_CONTROL, reg); + return regmap_update_bits(ds1307->regmap, MCP794XX_REG_CONTROL, + MCP794XX_BIT_ALM0_EN, + enabled ? MCP794XX_BIT_ALM0_EN : 0); } static const struct rtc_class_ops mcp794xx_rtc_ops = { @@ -905,20 +884,11 @@ static int ds3231_clk_sqw_rates[] = { static int ds1337_write_control(struct ds1307 *ds1307, u8 mask, u8 value) { struct mutex *lock = &ds1307->rtc->ops_lock; - int control; int ret; mutex_lock(lock); - - ret = regmap_read(ds1307->regmap, DS1337_REG_CONTROL, &control); - if (ret) - goto out; - - control &= ~mask; - control |= value; - - ret = regmap_write(ds1307->regmap, DS1337_REG_CONTROL, control); -out: + ret = regmap_update_bits(ds1307->regmap, DS1337_REG_CONTROL, + mask, value); mutex_unlock(lock); return ret; @@ -1024,22 +994,12 @@ static unsigned long ds3231_clk_32khz_recalc_rate(struct clk_hw *hw, static int ds3231_clk_32khz_control(struct ds1307 *ds1307, bool enable) { struct mutex *lock = &ds1307->rtc->ops_lock; - int status; int ret; mutex_lock(lock); - - ret = regmap_read(ds1307->regmap, DS1337_REG_STATUS, &status); - if (ret) - goto out; - - if (enable) - status |= DS3231_BIT_EN32KHZ; - else - status &= ~DS3231_BIT_EN32KHZ; - - ret = regmap_write(ds1307->regmap, DS1337_REG_STATUS, status); -out: + ret = regmap_update_bits(ds1307->regmap, DS1337_REG_STATUS, + DS3231_BIT_EN32KHZ, + enable ? DS3231_BIT_EN32KHZ : 0); mutex_unlock(lock); return ret; @@ -1495,12 +1455,10 @@ static int ds1307_probe(struct i2c_client *client, * If different then set the wday which we computed using * timestamp */ - if (wday != tm.tm_wday) { - regmap_read(ds1307->regmap, MCP794XX_REG_WEEKDAY, &wday); - wday = wday & ~MCP794XX_REG_WEEKDAY_WDAY_MASK; - wday = wday | (tm.tm_wday + 1); - regmap_write(ds1307->regmap, MCP794XX_REG_WEEKDAY, wday); - } + if (wday != tm.tm_wday) + regmap_update_bits(ds1307->regmap, MCP794XX_REG_WEEKDAY, + MCP794XX_REG_WEEKDAY_WDAY_MASK, + tm.tm_wday + 1); if (want_irq) { device_set_wakeup_capable(ds1307->dev, true);