All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marcelo Schmitt <marcelo.schmitt1@gmail.com>
To: Jonathan Cameron <jic23@kernel.org>
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: Tue, 14 Dec 2021 14:12:24 -0300	[thread overview]
Message-ID: <YbjQeDekwU1wTdrF@marsc.168.1.7> (raw)
In-Reply-To: <20211205202710.2847005-6-jic23@kernel.org>

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>

> ---
>  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

> +
> +	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));
> @@ -264,10 +287,11 @@ static int ad7280_read_reg(struct ad7280_state *st, unsigned int devaddr,
>  	if (ad7280_check_crc(st, tmp))
>  		return -EIO;
>  
> -	if (((tmp >> 27) != devaddr) || (((tmp >> 21) & 0x3F) != addr))
> +	if ((FIELD_GET(AD7280A_TRANS_READ_DEVADDR_MSK, tmp) != devaddr) ||
> +	    (FIELD_GET(AD7280A_TRANS_READ_REG_REGADDR_MSK, tmp) != addr))
>  		return -EFAULT;
>  
> -	return (tmp >> 13) & 0xFF;
> +	return FIELD_GET(AD7280A_TRANS_READ_REG_DATA_MSK, tmp);
>  }
>  
>  static int ad7280_read_channel(struct ad7280_state *st, unsigned int devaddr,
> @@ -310,10 +334,11 @@ static int ad7280_read_channel(struct ad7280_state *st, unsigned int devaddr,
>  	if (ad7280_check_crc(st, tmp))
>  		return -EIO;
>  
> -	if (((tmp >> 27) != devaddr) || (((tmp >> 23) & 0xF) != addr))
> +	if ((FIELD_GET(AD7280A_TRANS_READ_DEVADDR_MSK, tmp) != devaddr) ||
> +	    (FIELD_GET(AD7280A_TRANS_READ_CONV_CHANADDR_MSK, tmp) != addr))
>  		return -EFAULT;
>  
> -	return (tmp >> 11) & 0xFFF;
> +	return FIELD_GET(AD7280A_TRANS_READ_CONV_DATA_MSK, tmp);
>  }
>  
>  static int ad7280_read_all_channels(struct ad7280_state *st, unsigned int cnt,
> @@ -351,8 +376,9 @@ static int ad7280_read_all_channels(struct ad7280_state *st, unsigned int cnt,
>  		if (array)
>  			array[i] = tmp;
>  		/* only sum cell voltages */
> -		if (((tmp >> 23) & 0xF) <= AD7280A_CELL_VOLTAGE_6_REG)
> -			sum += ((tmp >> 11) & 0xFFF);
> +		if (FIELD_GET(AD7280A_TRANS_READ_CONV_CHANADDR_MSK, tmp) <=
> +		    AD7280A_CELL_VOLTAGE_6_REG)
> +			sum += FIELD_GET(AD7280A_TRANS_READ_CONV_DATA_MSK, tmp);
>  	}
>  
>  	return sum;
> @@ -407,7 +433,7 @@ static int ad7280_chain_setup(struct ad7280_state *st)
>  			goto error_power_down;
>  		}
>  
> -		if (n != ad7280a_devaddr(val >> 27)) {
> +		if (n != ad7280a_devaddr(FIELD_GET(AD7280A_TRANS_READ_DEVADDR_MSK, val))) {
>  			ret = -EIO;
>  			goto error_power_down;
>  		}
> -- 
> 2.34.1
> 

  reply	other threads:[~2021-12-14 17:12 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 [this message]
2022-02-06 17:14     ` Jonathan Cameron
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=YbjQeDekwU1wTdrF@marsc.168.1.7 \
    --to=marcelo.schmitt1@gmail.com \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=Nuno.Sa@analog.com \
    --cc=jic23@kernel.org \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.