Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp1600729pxv; Sat, 10 Jul 2021 09:08:17 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxNeJoZuyIpbjyp9u0jQs1Io7yoATxEPABbW7cYkbohSYTV7sJEYRl+mS5jdkZMdiRPkqFR X-Received: by 2002:a92:902:: with SMTP id y2mr5165302ilg.67.1625933297484; Sat, 10 Jul 2021 09:08:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625933297; cv=none; d=google.com; s=arc-20160816; b=W4WtfE7vGWqzcsdOmWX9g+juhz7UNo3SrWDeCHms2iR47B79+Pc6j6rYpru2Iu8sjd O1pbK3Kz6vi5wHHH6D3SCl3HMeQiDhOUhdRQihy+fSMBh+Jvj1KmJ2dJbWzKBiIV+VZh kdQmetpjdMfikO6taru5OS2k0bANx6lNs4h8dkumLtu5+lfHZc8exYhAQA0ChIdHWvnk 7lM43QFa0x2EBz7JpmTKyHotnjcCiLrqObcxQdKAkt9pw74Faji7HHZE1vyzlLP7ttQF i7lVftfc18lRSFWuBrZzzB7OY0YnWm8J1r5cG6dUDUsEKjKkU7p8+SBPJCIjM4Q166w9 FmrA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:subject:cc:to:from:date; bh=oqkbV1VTscCWPzjiZd70W91UfC9mG0sOpi8l1ghtfRM=; b=1FsZpJLb3od/b87sXHmLElSF7BkNTC1z2XYiQTO89DJ5ww808yW0DoiZN1D6kL3Zdj 7OhQoHfKcEatgHsI8SzSbtvDsoZ46c8BjnEqb4peAuzfpgEXTnmCJPM4HslCam7wd0Sy 10WOGKbWbqVDqWYlbdyjtXDyHDxdtnwamEYJBLKS2f9hWfuRrAcBP6KpR6Xq7s8SoBRF k/ksFARpgSt+Jd97HMoL5dGBewjtzXnw+6dqI/kNRWbOB2WBEDEBgynOPNKcOX3IHWp9 PgBU4J38gXgcswJVz6ZfezZyvqGi4j+JeCYwKVyPgEcPjMF/RstoZ6piWTRUpzRgcAVf ktzA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id v5si7986580jan.37.2021.07.10.09.08.04; Sat, 10 Jul 2021 09:08:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232078AbhGJQIz (ORCPT + 99 others); Sat, 10 Jul 2021 12:08:55 -0400 Received: from mail.kernel.org ([198.145.29.99]:37744 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230325AbhGJQIz (ORCPT ); Sat, 10 Jul 2021 12:08:55 -0400 Received: from jic23-huawei (cpc108967-cmbg20-2-0-cust86.5-4.cable.virginm.net [81.101.6.87]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id D65BB61249; Sat, 10 Jul 2021 16:06:06 +0000 (UTC) Date: Sat, 10 Jul 2021 17:08:37 +0100 From: Jonathan Cameron To: Liam Beguin Cc: lars@metafoo.de, Michael.Hennerich@analog.com, charles-antoine.couret@essensium.com, Nuno.Sa@analog.com, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, devicetree@vger.kernel.org, robh+dt@kernel.org Subject: Re: [PATCH v2 1/4] iio: adc: ad7949: define and use bitfield names Message-ID: <20210710170837.263d6b1a@jic23-huawei> In-Reply-To: <20210709155856.1732245-2-liambeguin@gmail.com> References: <20210709155856.1732245-1-liambeguin@gmail.com> <20210709155856.1732245-2-liambeguin@gmail.com> X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.33; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 9 Jul 2021 11:58:53 -0400 Liam Beguin wrote: > From: Liam Beguin > > Replace raw configuration register values by using FIELD_PREP and > defines to improve readability. > > Signed-off-by: Liam Beguin Ideally fixes should come before any refactors / cleanups like this one. That reduces the burden if people want to backport them. In this particular case I'm guessing no one ran into the issues the following patches deal with so we can just take these in the order you have here. Otherwise, good cleanup. A few minor comments inline, mostly as a result of some less than ideal name choices on the datasheet. > --- > drivers/iio/adc/ad7949.c | 38 +++++++++++++++++++++++++++++++------- > 1 file changed, 31 insertions(+), 7 deletions(-) > > diff --git a/drivers/iio/adc/ad7949.c b/drivers/iio/adc/ad7949.c > index 1b4b3203e428..93aacf4f680b 100644 > --- a/drivers/iio/adc/ad7949.c > +++ b/drivers/iio/adc/ad7949.c > @@ -12,12 +12,27 @@ > #include > #include > > -#define AD7949_MASK_CHANNEL_SEL GENMASK(9, 7) > #define AD7949_MASK_TOTAL GENMASK(13, 0) > -#define AD7949_OFFSET_CHANNEL_SEL 7 > -#define AD7949_CFG_READ_BACK 0x1 > #define AD7949_CFG_REG_SIZE_BITS 14 > > +#define AD7949_CFG_BIT_CFG BIT(13) Even though that's the name on the datasheet it is silly! I would have just one define called AD7949_CFG_VAL_OVERWRITE BIT(13) It's common to do that for single flags where FIELD_PREP(AD7949_CFG_VAL_OVERWRITE, 1) for example has an obvious meaning for the 1. > +#define AD7949_CFG_VAL_CFG_OVERWRITE 1 > +#define AD7949_CFG_VAL_CFG_KEEP 0 > +#define AD7949_CFG_BIT_INCC GENMASK(12, 10) > +#define AD7949_CFG_VAL_INCC_UNIPOLAR_GND 7 > +#define AD7949_CFG_VAL_INCC_UNIPOLAR_COMM 6 > +#define AD7949_CFG_VAL_INCC_UNIPOLAR_DIFF 4 > +#define AD7949_CFG_VAL_INCC_TEMP 3 > +#define AD7949_CFG_VAL_INCC_BIPOLAR 2 > +#define AD7949_CFG_VAL_INCC_BIPOLAR_DIFF 0 > +#define AD7949_CFG_BIT_INX GENMASK(9, 7) This is rather non obvious abbreviation. _INx would be clearer perhaps, but then we'd get someone fixing the camel case... Given it would be good to match the datasheet, keep the name but add a comment to say this is the input channel select. > +#define AD7949_CFG_BIT_BW BIT(6) As above, I'd suggest just defining AD7949_CFG_VAL_BW_FULL BIT(6) then it's either full or not depending on a 0 or 1 write. > +#define AD7949_CFG_VAL_BW_FULL 1 > +#define AD7949_CFG_VAL_BW_QUARTER 0 > +#define AD7949_CFG_BIT_REF GENMASK(5, 3) > +#define AD7949_CFG_BIT_SEQ GENMASK(2, 1) > +#define AD7949_CFG_BIT_RBN BIT(0) > + > enum { > ID_AD7949 = 0, > ID_AD7682, > @@ -109,8 +124,8 @@ static int ad7949_spi_read_channel(struct ad7949_adc_chip *ad7949_adc, int *val, > */ > for (i = 0; i < 2; i++) { > ret = ad7949_spi_write_cfg(ad7949_adc, > - channel << AD7949_OFFSET_CHANNEL_SEL, > - AD7949_MASK_CHANNEL_SEL); > + FIELD_PREP(AD7949_CFG_BIT_INX, channel), > + AD7949_CFG_BIT_INX); > if (ret) > return ret; > if (channel == ad7949_adc->current_channel) > @@ -214,10 +229,19 @@ static int ad7949_spi_init(struct ad7949_adc_chip *ad7949_adc) > { > int ret; > int val; > + u16 cfg; > > - /* Sequencer disabled, CFG readback disabled, IN0 as default channel */ > ad7949_adc->current_channel = 0; > - ret = ad7949_spi_write_cfg(ad7949_adc, 0x3C79, AD7949_MASK_TOTAL); > + > + cfg = FIELD_PREP(AD7949_CFG_BIT_CFG, AD7949_CFG_VAL_CFG_OVERWRITE) | > + FIELD_PREP(AD7949_CFG_BIT_INCC, AD7949_CFG_VAL_INCC_UNIPOLAR_GND) | > + FIELD_PREP(AD7949_CFG_BIT_INX, ad7949_adc->current_channel) | > + FIELD_PREP(AD7949_CFG_BIT_BW, AD7949_CFG_VAL_BW_FULL) | > + FIELD_PREP(AD7949_CFG_BIT_REF, AD7949_REF_EXT_BUF) | > + FIELD_PREP(AD7949_CFG_BIT_SEQ, 0x0) | > + FIELD_PREP(AD7949_CFG_BIT_RBN, 1); > + > + ret = ad7949_spi_write_cfg(ad7949_adc, cfg, AD7949_MASK_TOTAL); > > /* > * Do two dummy conversions to apply the first configuration setting.