Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp116757yba; Wed, 3 Apr 2019 05:42:18 -0700 (PDT) X-Google-Smtp-Source: APXvYqx4Fh4ShXIqphlvGm9pZ0NO27npJsWtLiNTb5P99xZTYGLIgV0LyLOKmAidja1O0chr77X6 X-Received: by 2002:a63:e653:: with SMTP id p19mr10947972pgj.284.1554295338399; Wed, 03 Apr 2019 05:42:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554295338; cv=none; d=google.com; s=arc-20160816; b=YSjL/9Ex+L5NA8Gmi+ZebjsdEDsE+/Kxz+oZ6HTF7R4EQPTw7lICbuEigyNIVqGRyz bFmuWNlQBnkxXB+bCbOwIDIZi/JmDTsLeCeBfsZPsvBXV00UorNNGwfxfqADe4hiFdk5 QqIOmIFkv/lsDFnMvWYoyl59I8U/OqGFjMEcKVU07na0VXdYqzbAC3DEuvHphd6gclIJ zmCqg0y1VjewQTP5GcFOb6P/aAHuzeLf2+cdpYSFwUnl+MN3fEKV7qJ5d+MLPtOAnpMV +t1MiONhfW3ue1PcCTahFoeLTlHBycBiVz7K2qfUw5fXzChwbu5NJJq8wRZYpTy2dIcy BjjQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=DoH1R+gqqdvyNkwnuW2W/z5e+2mXp5sH03BBsKSgLdA=; b=f3net1N7iUMgnfkzCI2UjyX+c2kd2Jr2OLjFJ/cx5l0hn9sq3eWBlkfx2p9BBsoKqh Ts0VOVhpwuNOH18pSS3KIOu2N8sCF4NubE3eCnGrQ83xlu6GMWsDqAOWjgV/NHyzr+tS z+Vjemi9Ony3jnGgddeBGUMWDHva4TKz5r8nNg7cSiTA+e0lIJE5L/Tup0pXIEL7juWS kAu9LGtz6tGq7ADu6QLbHkRGX++Y9s3qpPhC3exx/6b0W3IQtSxDq1b6wBuemltjBijR UQpVJxhBHvmwtNecZvP5VKPknKJABEGRCzMl6e/uDPSFTjZf+5HIYUP7knYwnSPVAOla ACaw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u4si13862920pls.183.2019.04.03.05.42.03; Wed, 03 Apr 2019 05:42:18 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726948AbfDCMlI (ORCPT + 99 others); Wed, 3 Apr 2019 08:41:08 -0400 Received: from sauhun.de ([88.99.104.3]:48410 "EHLO pokefinder.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726723AbfDCMkm (ORCPT ); Wed, 3 Apr 2019 08:40:42 -0400 Received: from localhost (p54B3311F.dip0.t-ipconnect.de [84.179.49.31]) by pokefinder.org (Postfix) with ESMTPSA id 81A513E43D1; Wed, 3 Apr 2019 14:40:40 +0200 (CEST) From: Wolfram Sang To: linux-i2c@vger.kernel.org Cc: linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peter Rosin , Stefan Lengfeld , linux-omap@vger.kernel.org, linux-tegra@vger.kernel.org, Linus Walleij , Andy Shevchenko , Wolfram Sang Subject: [PATCH 11/12] i2c: algo: bit: add flag to whitelist atomic transfers Date: Wed, 3 Apr 2019 14:40:18 +0200 Message-Id: <20190403124019.8947-12-wsa+renesas@sang-engineering.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190403124019.8947-1-wsa+renesas@sang-engineering.com> References: <20190403124019.8947-1-wsa+renesas@sang-engineering.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Use the new xfer_atomic callback to check a newly introduced flag to whitelist atomic transfers. This will report configurations which worked accidently. Signed-off-by: Wolfram Sang --- drivers/i2c/algos/i2c-algo-bit.c | 22 ++++++++++++++++++++-- include/linux/i2c-algo-bit.h | 1 + 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/drivers/i2c/algos/i2c-algo-bit.c b/drivers/i2c/algos/i2c-algo-bit.c index 5e5990a83da5..913db013fe90 100644 --- a/drivers/i2c/algos/i2c-algo-bit.c +++ b/drivers/i2c/algos/i2c-algo-bit.c @@ -603,6 +603,23 @@ static int bit_xfer(struct i2c_adapter *i2c_adap, return ret; } +/* + * We print a warning when we are not flagged to support atomic transfers but + * will try anyhow. That's what the I2C core would do as well. Sadly, we can't + * modify the algorithm struct at probe time because this struct is exported + * 'const'. + */ +static int bit_xfer_atomic(struct i2c_adapter *i2c_adap, struct i2c_msg msgs[], + int num) +{ + struct i2c_algo_bit_data *adap = i2c_adap->algo_data; + + if (!adap->can_do_atomic) + dev_warn(&i2c_adap->dev, "not flagged for atomic transfers\n"); + + return bit_xfer(i2c_adap, msgs, num); +} + static u32 bit_func(struct i2c_adapter *adap) { return I2C_FUNC_I2C | I2C_FUNC_NOSTART | I2C_FUNC_SMBUS_EMUL | @@ -615,8 +632,9 @@ static u32 bit_func(struct i2c_adapter *adap) /* -----exported algorithm data: ------------------------------------- */ const struct i2c_algorithm i2c_bit_algo = { - .master_xfer = bit_xfer, - .functionality = bit_func, + .master_xfer = bit_xfer, + .master_xfer_atomic = bit_xfer_atomic, + .functionality = bit_func, }; EXPORT_SYMBOL(i2c_bit_algo); diff --git a/include/linux/i2c-algo-bit.h b/include/linux/i2c-algo-bit.h index 69045df78e2d..7fd5575a368f 100644 --- a/include/linux/i2c-algo-bit.h +++ b/include/linux/i2c-algo-bit.h @@ -33,6 +33,7 @@ struct i2c_algo_bit_data { minimum 5 us for standard-mode I2C and SMBus, maximum 50 us for SMBus */ int timeout; /* in jiffies */ + bool can_do_atomic; /* callbacks don't sleep, we can be atomic */ }; int i2c_bit_add_bus(struct i2c_adapter *); -- 2.11.0