From: Jonathan Cameron <jic23@kernel.org>
To: Marcelo Schmitt <marcelo.schmitt1@gmail.com>
Cc: linux-iio@vger.kernel.org, Nuno Sa <Nuno.Sa@analog.com>,
lars@metafoo.de, Jonathan Cameron <Jonathan.Cameron@huawei.com>
Subject: Re: [PATCH v2 05/17] staging:iio:adc:ad7280a: Use bitfield ops to managed fields in transfers.
Date: Sun, 6 Feb 2022 17:14:54 +0000 [thread overview]
Message-ID: <20220206171454.7be8dd34@jic23-huawei> (raw)
In-Reply-To: <YbjQeDekwU1wTdrF@marsc.168.1.7>
On Tue, 14 Dec 2021 14:12:24 -0300
Marcelo Schmitt <marcelo.schmitt1@gmail.com> wrote:
> Minor bit inline.
>
> On 12/05, Jonathan Cameron wrote:
> > From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> >
> > The write and two types of read transfer are sufficiently complex that
> > they benefit from the clarity of using FIELD_PREP() and FIELD_GET()
> >
> > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> Reviewed-by: Marcelo Schmitt <marcelo.schmitt1@gmail.com>
Those hunks you highlighted in patch 2 now in this patch and I've added a note
to the description to say a similar arguement applies to the event_handler()
Reply to your comment inline. I didn't understand this one.
>
> > ---
> > drivers/staging/iio/adc/ad7280a.c | 46 ++++++++++++++++++++++++-------
> > 1 file changed, 36 insertions(+), 10 deletions(-)
> >
> > diff --git a/drivers/staging/iio/adc/ad7280a.c b/drivers/staging/iio/adc/ad7280a.c
> > index 1f7ea5fb1e20..158a792c0bf8 100644
> > --- a/drivers/staging/iio/adc/ad7280a.c
> > +++ b/drivers/staging/iio/adc/ad7280a.c
> > @@ -95,6 +95,23 @@
> > #define AD7280A_READ_ADDR_MSK GENMASK(7, 2)
> > #define AD7280A_CNVST_CTRL_REG 0x1D /* D7 to D0, Read/write */
> >
> > +/* Transfer fields */
> > +#define AD7280A_TRANS_WRITE_DEVADDR_MSK GENMASK(31, 27)
> > +#define AD7280A_TRANS_WRITE_ADDR_MSK GENMASK(26, 21)
> > +#define AD7280A_TRANS_WRITE_VAL_MSK GENMASK(20, 13)
> > +#define AD7280A_TRANS_WRITE_ALL_MSK BIT(12)
> > +#define AD7280A_TRANS_WRITE_CRC_MSK GENMASK(10, 3)
> > +#define AD7280A_TRANS_WRITE_RES_PATTERN 0x2
> > +
> > +/* Layouts differ for channel vs other registers */
> > +#define AD7280A_TRANS_READ_DEVADDR_MSK GENMASK(31, 27)
> > +#define AD7280A_TRANS_READ_CONV_CHANADDR_MSK GENMASK(26, 23)
> > +#define AD7280A_TRANS_READ_CONV_DATA_MSK GENMASK(22, 11)
> > +#define AD7280A_TRANS_READ_REG_REGADDR_MSK GENMASK(26, 21)
> > +#define AD7280A_TRANS_READ_REG_DATA_MSK GENMASK(20, 13)
> > +#define AD7280A_TRANS_READ_WRITE_ACK_MSK BIT(10)
> > +#define AD7280A_TRANS_READ_CRC_MSK GENMASK(9, 2)
> > +
> > /* Magic value used to indicate this special case */
> > #define AD7280A_ALL_CELLS (0xAD << 16)
> >
> > @@ -216,10 +233,16 @@ static int __ad7280_read32(struct ad7280_state *st, unsigned int *val)
> > static int ad7280_write(struct ad7280_state *st, unsigned int devaddr,
> > unsigned int addr, bool all, unsigned int val)
> > {
> > - unsigned int reg = devaddr << 27 | addr << 21 |
> > - (val & 0xFF) << 13 | all << 12;
> > + unsigned int reg = FIELD_PREP(AD7280A_TRANS_WRITE_DEVADDR_MSK, devaddr) |
> > + FIELD_PREP(AD7280A_TRANS_WRITE_ADDR_MSK, addr) |
> > + FIELD_PREP(AD7280A_TRANS_WRITE_VAL_MSK, val) |
> > + FIELD_PREP(AD7280A_TRANS_WRITE_ALL_MSK, all);
> Does reg get initialized to 0? If not, we should take care of the reserved bit D11
>
You have lost me here. We are writing the whole register and this first
assignment of reg uses = not |= so any bits not set explicitly will be zero.
We could do a FIELD_PREP(BIT(11), 0) with an appropriate name for the BIT(11) define
but that would be a bit odd.
> > +
> > + reg |= FIELD_PREP(AD7280A_TRANS_WRITE_CRC_MSK,
> > + ad7280_calc_crc8(st->crc_tab, reg >> 11));
> > + /* Reserved b010 pattern not included crc calc */
> > + reg |= AD7280A_TRANS_WRITE_RES_PATTERN;
> >
> > - reg |= ad7280_calc_crc8(st->crc_tab, reg >> 11) << 3 | 0x2;
> > st->tx = cpu_to_be32(reg);
> >
> > return spi_write(st->spi, &st->tx, sizeof(st->tx));
next prev parent reply other threads:[~2022-02-06 17:08 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-05 20:26 [PATCH v2 00/17] iio:adc:ad7280a Cleanup and proposed staging graduation Jonathan Cameron
2021-12-05 20:26 ` [PATCH v2 01/17] staging:iio:adc:ad7280a: Fix handing of device address bit reversing Jonathan Cameron
2021-12-13 12:26 ` Marcelo Schmitt
2021-12-05 20:26 ` [PATCH v2 02/17] staging:iio:adc:ad7280a: Register define cleanup Jonathan Cameron
2021-12-13 12:41 ` Marcelo Schmitt
2022-02-06 17:01 ` Jonathan Cameron
2021-12-05 20:26 ` [PATCH v2 03/17] staging:iio:adc:ad7280a: rename _read() to _read_reg() Jonathan Cameron
2021-12-14 17:05 ` Marcelo Schmitt
2021-12-05 20:26 ` [PATCH v2 04/17] staging:iio:adc:ad7280a: Split buff[2] into tx and rx parts Jonathan Cameron
2021-12-14 17:05 ` Marcelo Schmitt
2021-12-05 20:26 ` [PATCH v2 05/17] staging:iio:adc:ad7280a: Use bitfield ops to managed fields in transfers Jonathan Cameron
2021-12-14 17:12 ` Marcelo Schmitt
2022-02-06 17:14 ` Jonathan Cameron [this message]
2022-02-06 18:02 ` Marcelo Schmitt
2021-12-05 20:26 ` [PATCH v2 06/17] staging:iio:adc:ad7280a: Switch to standard event control Jonathan Cameron
2021-12-14 17:41 ` Marcelo Schmitt
2022-02-06 17:34 ` Jonathan Cameron
2021-12-05 20:27 ` [PATCH v2 07/17] staging:iio:adc:ad7280a: Standardize extended ABI naming Jonathan Cameron
2021-12-18 20:17 ` Marcelo Schmitt
2021-12-05 20:27 ` [PATCH v2 08/17] staging:iio:adc:ad7280a: Drop unused timestamp channel Jonathan Cameron
2021-12-18 20:18 ` Marcelo Schmitt
2021-12-05 20:27 ` [PATCH v2 09/17] staging:iio:adc:ad7280a: Trivial comment formatting cleanup Jonathan Cameron
2021-12-18 20:21 ` Marcelo Schmitt
2021-12-05 20:27 ` [PATCH v2 10/17] staging:iio:adc:ad7280a: Make oversampling_ratio a runtime control Jonathan Cameron
2021-12-18 20:22 ` Marcelo Schmitt
2021-12-05 20:27 ` [PATCH v2 11/17] staging:iio:adc:ad7280a: Cleanup includes Jonathan Cameron
2021-12-18 20:22 ` Marcelo Schmitt
2021-12-05 20:27 ` [PATCH v2 12/17] staging:iio:ad7280a: Reflect optionality of irq in ABI Jonathan Cameron
2021-12-18 20:30 ` Marcelo Schmitt
2022-01-30 20:05 ` Jonathan Cameron
2021-12-05 20:27 ` [PATCH v2 13/17] staging:iio:adc:ad7280a: Use a local dev pointer to avoid &spi->dev Jonathan Cameron
2021-12-18 20:31 ` Marcelo Schmitt
2021-12-05 20:27 ` [PATCH v2 14/17] staging:iio:adc:ad7280a: Use device properties to replace platform data Jonathan Cameron
2021-12-18 21:06 ` Marcelo Schmitt
2022-01-30 20:24 ` Jonathan Cameron
2022-02-06 18:06 ` Jonathan Cameron
2021-12-05 20:27 ` [PATCH v2 15/17] dt-bindings:iio:adc:ad7280a: Add binding Jonathan Cameron
2021-12-18 21:18 ` Marcelo Schmitt
2022-01-30 20:29 ` Jonathan Cameron
2022-02-06 2:31 ` Marcelo Schmitt
2022-02-06 18:13 ` Jonathan Cameron
2021-12-05 20:27 ` [PATCH v2 16/17] iio:adc:ad7280a: Document ABI for cell balance switches Jonathan Cameron
2021-12-18 21:20 ` Marcelo Schmitt
2021-12-05 20:27 ` [PATCH v2 17/17] iio:adc:ad7280a: Move out of staging Jonathan Cameron
2021-12-18 22:08 ` Marcelo Schmitt
2022-01-30 20:46 ` Jonathan Cameron
2022-02-06 18:45 ` Jonathan Cameron
2021-12-13 12:51 ` [PATCH v2 00/17] iio:adc:ad7280a Cleanup and proposed staging graduation Marcelo Schmitt
2021-12-16 11:46 ` Jonathan Cameron
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220206171454.7be8dd34@jic23-huawei \
--to=jic23@kernel.org \
--cc=Jonathan.Cameron@huawei.com \
--cc=Nuno.Sa@analog.com \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=marcelo.schmitt1@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox