From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from sender4-pp-o93.zoho.com (sender4-pp-o93.zoho.com [136.143.188.93]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0961936D for ; Mon, 23 May 2022 03:33:42 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; t=1653276660; cv=none; d=zohomail.com; s=zohoarc; b=HRgHsyoEU1dReyNbZfWn4dnfvxjJ03506oh9r3NNQWusOAnmj+9fS+o6qSH4Op+gTlKbF1gTI9rotxzV1bRUy6ks7lbNnM58TP813qlGvgouFrnQ07XnEO7LKisl1HptAc0bPi6dgAlzO7Ip7zS5EJLXQ3Efi6SzNvhfBfh36Ks= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1653276660; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=iOuKNttKba44VCrdDFasYVWLGm+FaDpWr1wgK72EB+U=; b=WgciRNzQUpL2LcCSADQCDGUK/azAe0PW+hTg+C+kuGGJr6RnI7O3OX/9rwBhegC4OqxATYIkY2bcaTPnnlDO7T+fC0YG95KYXcU/Nyo6xhmfAGqBys2/FvP3/WLYF4wTMbk/fV4mRY+C48j0hP77xnydMGIas/AcGqgnolgUFD4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=zohomail.com; spf=pass smtp.mailfrom=lchen.firstlove@zohomail.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1653276660; s=zm2022; d=zohomail.com; i=lchen.firstlove@zohomail.com; h=Date:Date:From:From:To:To:Cc:Cc:Message-ID:In-Reply-To:References:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Feedback-ID:Message-Id:Reply-To; bh=iOuKNttKba44VCrdDFasYVWLGm+FaDpWr1wgK72EB+U=; b=XJEvJgyLQPDSfzdGxxalNe7XEZON9Qer5QLFjMJo/r6YQKgkgF3ifESjYbw7OK7S 5ezVHobQ1QNmDUcVZyGQwBAir5toyvygS5zHJ+VXn471A72zavlw7nA+3zHGoRiykh/ 087fwRtFK1RuiH5mwrZ8kywP8mGwxwGadHVpUTHY= Received: from mail.zoho.com by mx.zohomail.com with SMTP id 1653276659933600.0289800555119; Sun, 22 May 2022 20:30:59 -0700 (PDT) Received: from [45.12.140.94] by mail.zoho.com with HTTP;Sun, 22 May 2022 20:30:59 -0700 (PDT) Date: Sun, 22 May 2022 20:30:59 -0700 From: Li Chen To: "Samuel Holland" Cc: "Mark Brown" , "linux-kernel" , "Greg Kroah-Hartman" , "Rafael J. Wysocki" , "linux-gpio" , "Linus Walleij" , "linux-arm-kernel" , "Patrice Chotard" , "linux-sunxi" , "Liam Girdwood" , "Jaroslav Kysela" , "Takashi Iwai" , "Chen-Yu Tsai" , "Jernej Skrabec" , "Philipp Zabel" Message-ID: <180eef7d0c4.d42849e060770.1995440542302495013@zohomail.com> In-Reply-To: References: <180e702a15f.e737e37e45859.3135149506136486394@zohomail.com> <180eeb93909.12110e2de60158.391061173597432851@zohomail.com> <180eeba3811.f7218bc260169.7323954027713751119@zohomail.com> Subject: Re: [PATCH v2 1/4] regmap: provide regmap_field helpers for simple bit operations Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Importance: Medium User-Agent: Zoho Mail X-Mailer: Zoho Mail Feedback-ID: rr08011226236ae7c8a4d2e2d0f61154fe0000e83e5c4313bebdb6f116261b31963974c76f6d1e80eb8fd5:zu0801122778073d0592069c92442816d300004d472a322eed3fe9ffedac5a34ff8964dbe612d4572482e1f2:rf0801122b498d8bc789dff53c5fb4fe7e0000e449ecb1215f453ef4f9820d6d5fdf3a24ab25c96ebd6ead125832aa76:ZohoMail Hi Samuel, ---- On Sun, 22 May 2022 20:09:55 -0700 Samuel Holland wrote ---- > Hi, > > On 5/22/22 9:23 PM, Li Chen wrote: > > From: Li Chen > > > > We have set/clear/test operations for regmap, but not for regmap_field yet. > > So let's introduce regmap_field helpers too. > > > > In many instances regmap_field_update_bits() is used for simple bit setting > > and clearing. In these cases the last argument is redundant and we can > > hide it with a static inline function. > > > > This adds three new helpers for simple bit operations: set_bits, > > clear_bits and test_bits (the last one defined as a regular function). > > > > Signed-off-by: Li Chen > > --- > > drivers/base/regmap/regmap.c | 22 +++++++++++++++++++++ > > include/linux/regmap.h | 37 ++++++++++++++++++++++++++++++++++++ > > 2 files changed, 59 insertions(+) > > > > diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c > > index 5e12f7cb5147..a37d6041b7bd 100644 > > --- a/drivers/base/regmap/regmap.c > > +++ b/drivers/base/regmap/regmap.c > > @@ -2208,6 +2208,28 @@ int regmap_field_update_bits_base(struct regmap_field *field, > > } > > EXPORT_SYMBOL_GPL(regmap_field_update_bits_base); > > > > +/** > > + * regmap_field_test_bits() - Check if all specified bits are set in a > > + * register field. > > + * > > + * @field: Register field to operate on > > + * @bits: Bits to test > > + * > > + * Returns -1 if the underlying regmap_field_read() fails, 0 if at least one of the > > + * tested bits is not set and 1 if all tested bits are set. > > + */ > > +int regmap_field_test_bits(struct regmap_field *field, unsigned int bits) > > +{ > > + unsigned int val, ret; > > + > > + ret = regmap_field_read(field, &val); > > + if (ret) > > + return ret; > > + > > + return (val & bits) == bits; > > +} > > +EXPORT_SYMBOL_GPL(regmap_field_test_bits); > > + > > /** > > * regmap_fields_update_bits_base() - Perform a read/modify/write cycle a > > * register field with port ID > > diff --git a/include/linux/regmap.h b/include/linux/regmap.h > > index de81a94d7b30..10b410734d9e 100644 > > --- a/include/linux/regmap.h > > +++ b/include/linux/regmap.h > > @@ -1324,6 +1324,22 @@ static inline int regmap_field_update_bits(struct regmap_field *field, > > NULL, false, false); > > } > > > > +static inline int regmap_field_set_bits(struct regmap_field *field, > > + unsigned int bits) > > +{ > > + return regmap_field_update_bits_base(field, bits, 0, NULL, false, > > + false); > > +} > > + > > +static inline int regmap_field_clear_bits(struct regmap_field *field, > > + unsigned int bits) > > +{ > > + return regmap_field_update_bits_base(field, bits, bits, NULL, false, > > + false); > > The contents of these two functions are swapped when compared to their names. Thanks for spotting this out! Fixed in v3. Regards, Li > > Regards, > Samuel > > > +} > > + > > +int regmap_field_test_bits(struct regmap_field *field, unsigned int bits); > > + > > static inline int > > regmap_field_force_update_bits(struct regmap_field *field, > > unsigned int mask, unsigned int val) > > @@ -1757,6 +1773,27 @@ regmap_field_force_update_bits(struct regmap_field *field, > > return -EINVAL; > > } > > > > +static inline int regmap_field_set_bits(struct regmap_field *field, > > + unsigned int bits) > > +{ > > + WARN_ONCE(1, "regmap API is disabled"); > > + return -EINVAL; > > +} > > + > > +static inline int regmap_field_clear_bits(struct regmap_field *field, > > + unsigned int bits) > > +{ > > + WARN_ONCE(1, "regmap API is disabled"); > > + return -EINVAL; > > +} > > + > > +static inline int regmap_field_test_bits(struct regmap_field *field, > > + unsigned int bits) > > +{ > > + WARN_ONCE(1, "regmap API is disabled"); > > + return -EINVAL; > > +} > > + > > static inline int regmap_fields_write(struct regmap_field *field, > > unsigned int id, unsigned int val) > > { > > > > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A749BC433F5 for ; Mon, 23 May 2022 09:44:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Subject:References: In-Reply-To:Message-ID:Cc:To:From:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=zjnTYwtPZJKZoCk3c1D2i9T8SSKsdGf+nVUjEzw1wKo=; b=rVSh+tvTC7UOicefe4qdyPjMbr eKmFL0Je/A325NaPLS8wgUc53g0inPDj8sSDQkCnJqcMSclsTkhoOe6NgoGnph+aJmMrMUt80VmSp CSCTUTbagrOroiLgTHWvqQk1V98LAnP5PVbhk7oF1yc9RJVyqyc0/XthUXEHOzzq9/yG8n0lnXizM nF2sUZgD686tdewJ38jbX3skW+tmnManYrzQFCzhIUDBpoOSuFX4PyLBmsjubsZF24ZhKGDQubukL 5yBamuaw5o8YHo6zGDf5lkF50ZBRTSCVHw3ZxjaE6pkgTg8s72YsngaQ8e6xY4DHqORv1lt+fgrzO XQbS03Pw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nt4aS-002w0J-CE; Mon, 23 May 2022 09:42:53 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nt2rU-002AAA-3q for linux-arm-kernel@bombadil.infradead.org; Mon, 23 May 2022 07:52:20 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:Content-Type :MIME-Version:Subject:References:In-Reply-To:Message-ID:Cc:To:From:Date: Sender:Reply-To:Content-ID:Content-Description; bh=iOuKNttKba44VCrdDFasYVWLGm+FaDpWr1wgK72EB+U=; b=WDpmX2liv5v8QP5fTqAZ3LpOlw fc3qxrjy5a684Fs6VqPowKDbu5hPN8ipNZaL3UzohwptqnYE+xBwBoHudpjYpmYhtcZXSi4o0EVIV kGNIhyM4I0NRxAxr26bYH/f8Rz40oAsj4/M6cNIcuWjocESoBzgI+HIr5cx+3PwgRdyMer10zRl9q gV9ocsolOgiUe1q+BNBycBY8gb4PUr0Ipsq1NlTzX8h7JqZ/VIwuki/cI64OaDVr+Fa8IMJFCvdXJ 5XBFD+d7M6D1MxnVKt9GRAdGFTLs5m+PCmWKXeiN42OGf8O1QR8TYzUGHaH3C4Ge3G+5qNC5r6cT/ UDoyqXhg==; Received: from sender4-pp-o93.zoho.com ([136.143.188.93]) by desiato.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nsyp6-000nMg-1h for linux-arm-kernel@lists.infradead.org; Mon, 23 May 2022 03:33:41 +0000 ARC-Seal: i=1; a=rsa-sha256; t=1653276660; cv=none; d=zohomail.com; s=zohoarc; b=HRgHsyoEU1dReyNbZfWn4dnfvxjJ03506oh9r3NNQWusOAnmj+9fS+o6qSH4Op+gTlKbF1gTI9rotxzV1bRUy6ks7lbNnM58TP813qlGvgouFrnQ07XnEO7LKisl1HptAc0bPi6dgAlzO7Ip7zS5EJLXQ3Efi6SzNvhfBfh36Ks= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1653276660; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=iOuKNttKba44VCrdDFasYVWLGm+FaDpWr1wgK72EB+U=; b=WgciRNzQUpL2LcCSADQCDGUK/azAe0PW+hTg+C+kuGGJr6RnI7O3OX/9rwBhegC4OqxATYIkY2bcaTPnnlDO7T+fC0YG95KYXcU/Nyo6xhmfAGqBys2/FvP3/WLYF4wTMbk/fV4mRY+C48j0hP77xnydMGIas/AcGqgnolgUFD4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=zohomail.com; spf=pass smtp.mailfrom=lchen.firstlove@zohomail.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1653276660; s=zm2022; d=zohomail.com; i=lchen.firstlove@zohomail.com; h=Date:Date:From:From:To:To:Cc:Cc:Message-ID:In-Reply-To:References:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Feedback-ID:Message-Id:Reply-To; bh=iOuKNttKba44VCrdDFasYVWLGm+FaDpWr1wgK72EB+U=; b=XJEvJgyLQPDSfzdGxxalNe7XEZON9Qer5QLFjMJo/r6YQKgkgF3ifESjYbw7OK7S 5ezVHobQ1QNmDUcVZyGQwBAir5toyvygS5zHJ+VXn471A72zavlw7nA+3zHGoRiykh/ 087fwRtFK1RuiH5mwrZ8kywP8mGwxwGadHVpUTHY= Received: from mail.zoho.com by mx.zohomail.com with SMTP id 1653276659933600.0289800555119; Sun, 22 May 2022 20:30:59 -0700 (PDT) Received: from [45.12.140.94] by mail.zoho.com with HTTP;Sun, 22 May 2022 20:30:59 -0700 (PDT) Date: Sun, 22 May 2022 20:30:59 -0700 From: Li Chen To: "Samuel Holland" Cc: "Mark Brown" , "linux-kernel" , "Greg Kroah-Hartman" , "Rafael J. Wysocki" , "linux-gpio" , "Linus Walleij" , "linux-arm-kernel" , "Patrice Chotard" , "linux-sunxi" , "Liam Girdwood" , "Jaroslav Kysela" , "Takashi Iwai" , "Chen-Yu Tsai" , "Jernej Skrabec" , "Philipp Zabel" Message-ID: <180eef7d0c4.d42849e060770.1995440542302495013@zohomail.com> In-Reply-To: References: <180e702a15f.e737e37e45859.3135149506136486394@zohomail.com> <180eeb93909.12110e2de60158.391061173597432851@zohomail.com> <180eeba3811.f7218bc260169.7323954027713751119@zohomail.com> Subject: Re: [PATCH v2 1/4] regmap: provide regmap_field helpers for simple bit operations MIME-Version: 1.0 Importance: Medium User-Agent: Zoho Mail X-Mailer: Zoho Mail Feedback-ID: rr08011226236ae7c8a4d2e2d0f61154fe0000e83e5c4313bebdb6f116261b31963974c76f6d1e80eb8fd5:zu0801122778073d0592069c92442816d300004d472a322eed3fe9ffedac5a34ff8964dbe612d4572482e1f2:rf0801122b498d8bc789dff53c5fb4fe7e0000e449ecb1215f453ef4f9820d6d5fdf3a24ab25c96ebd6ead125832aa76:ZohoMail X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220523_043339_054832_198C69BA X-CRM114-Status: GOOD ( 28.21 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi Samuel, ---- On Sun, 22 May 2022 20:09:55 -0700 Samuel Holland wrote ---- > Hi, > > On 5/22/22 9:23 PM, Li Chen wrote: > > From: Li Chen > > > > We have set/clear/test operations for regmap, but not for regmap_field yet. > > So let's introduce regmap_field helpers too. > > > > In many instances regmap_field_update_bits() is used for simple bit setting > > and clearing. In these cases the last argument is redundant and we can > > hide it with a static inline function. > > > > This adds three new helpers for simple bit operations: set_bits, > > clear_bits and test_bits (the last one defined as a regular function). > > > > Signed-off-by: Li Chen > > --- > > drivers/base/regmap/regmap.c | 22 +++++++++++++++++++++ > > include/linux/regmap.h | 37 ++++++++++++++++++++++++++++++++++++ > > 2 files changed, 59 insertions(+) > > > > diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c > > index 5e12f7cb5147..a37d6041b7bd 100644 > > --- a/drivers/base/regmap/regmap.c > > +++ b/drivers/base/regmap/regmap.c > > @@ -2208,6 +2208,28 @@ int regmap_field_update_bits_base(struct regmap_field *field, > > } > > EXPORT_SYMBOL_GPL(regmap_field_update_bits_base); > > > > +/** > > + * regmap_field_test_bits() - Check if all specified bits are set in a > > + * register field. > > + * > > + * @field: Register field to operate on > > + * @bits: Bits to test > > + * > > + * Returns -1 if the underlying regmap_field_read() fails, 0 if at least one of the > > + * tested bits is not set and 1 if all tested bits are set. > > + */ > > +int regmap_field_test_bits(struct regmap_field *field, unsigned int bits) > > +{ > > + unsigned int val, ret; > > + > > + ret = regmap_field_read(field, &val); > > + if (ret) > > + return ret; > > + > > + return (val & bits) == bits; > > +} > > +EXPORT_SYMBOL_GPL(regmap_field_test_bits); > > + > > /** > > * regmap_fields_update_bits_base() - Perform a read/modify/write cycle a > > * register field with port ID > > diff --git a/include/linux/regmap.h b/include/linux/regmap.h > > index de81a94d7b30..10b410734d9e 100644 > > --- a/include/linux/regmap.h > > +++ b/include/linux/regmap.h > > @@ -1324,6 +1324,22 @@ static inline int regmap_field_update_bits(struct regmap_field *field, > > NULL, false, false); > > } > > > > +static inline int regmap_field_set_bits(struct regmap_field *field, > > + unsigned int bits) > > +{ > > + return regmap_field_update_bits_base(field, bits, 0, NULL, false, > > + false); > > +} > > + > > +static inline int regmap_field_clear_bits(struct regmap_field *field, > > + unsigned int bits) > > +{ > > + return regmap_field_update_bits_base(field, bits, bits, NULL, false, > > + false); > > The contents of these two functions are swapped when compared to their names. Thanks for spotting this out! Fixed in v3. Regards, Li > > Regards, > Samuel > > > +} > > + > > +int regmap_field_test_bits(struct regmap_field *field, unsigned int bits); > > + > > static inline int > > regmap_field_force_update_bits(struct regmap_field *field, > > unsigned int mask, unsigned int val) > > @@ -1757,6 +1773,27 @@ regmap_field_force_update_bits(struct regmap_field *field, > > return -EINVAL; > > } > > > > +static inline int regmap_field_set_bits(struct regmap_field *field, > > + unsigned int bits) > > +{ > > + WARN_ONCE(1, "regmap API is disabled"); > > + return -EINVAL; > > +} > > + > > +static inline int regmap_field_clear_bits(struct regmap_field *field, > > + unsigned int bits) > > +{ > > + WARN_ONCE(1, "regmap API is disabled"); > > + return -EINVAL; > > +} > > + > > +static inline int regmap_field_test_bits(struct regmap_field *field, > > + unsigned int bits) > > +{ > > + WARN_ONCE(1, "regmap API is disabled"); > > + return -EINVAL; > > +} > > + > > static inline int regmap_fields_write(struct regmap_field *field, > > unsigned int id, unsigned int val) > > { > > > > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel