* [PATCH v2 0/2] iio: adc: mcp3422: apply bit manipulation macros
@ 2026-04-17 16:57 Marcelo Machado Lage
2026-04-17 16:57 ` [PATCH v2 1/2] iio: adc: mcp3422: rewrite mask macros using bitfield macros Marcelo Machado Lage
2026-04-17 16:57 ` [PATCH v2 2/2] iio: adc: mcp3422: write bit operations with " Marcelo Machado Lage
0 siblings, 2 replies; 6+ messages in thread
From: Marcelo Machado Lage @ 2026-04-17 16:57 UTC (permalink / raw)
To: andy, dlechner, jic23, nuno.sa; +Cc: Marcelo Machado Lage, linux-iio
This patch set rewrites several open-coded bit manipulation parts of
the MCP3421/2/3/4/5/6/7/8 driver code using bit.h and bitfield.h
macros.
This follows a request by Andy Shevchenko. Thanks, Andy!
Marcelo Machado Lage (2):
iio: adc: mcp3422: rewrite mask macros using bitfield macros
iio: adc: mcp3422: write bit operations with bitfield macros
drivers/iio/adc/mcp3422.c | 60 ++++++++++++++++-----------------------
1 file changed, 25 insertions(+), 35 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v2 1/2] iio: adc: mcp3422: rewrite mask macros using bitfield macros
2026-04-17 16:57 [PATCH v2 0/2] iio: adc: mcp3422: apply bit manipulation macros Marcelo Machado Lage
@ 2026-04-17 16:57 ` Marcelo Machado Lage
2026-04-18 16:26 ` David Lechner
2026-04-19 13:24 ` Jonathan Cameron
2026-04-17 16:57 ` [PATCH v2 2/2] iio: adc: mcp3422: write bit operations with " Marcelo Machado Lage
1 sibling, 2 replies; 6+ messages in thread
From: Marcelo Machado Lage @ 2026-04-17 16:57 UTC (permalink / raw)
To: andy, dlechner, jic23, nuno.sa
Cc: Marcelo Machado Lage, Vinicius Lira, linux-iio
Rewrite MCP3422_CHANNEL_MASK, MCP3422_PGA_MASK, MCP3422_PGA_MASK
and MCP3422_CONT_SAMPLING using GENMASK() and BIT() macros from
bitfield.h.
The other macros MCP3422_SRATE_{240, 60, 15, 3} were not changed
because they are also used as array indices.
Signed-off-by: Marcelo Machado Lage <marcelomlage@usp.br>
Co-developed-by: Vinicius Lira <vinilira@usp.br>
Signed-off-by: Vinicius Lira <vinilira@usp.br>
---
drivers/iio/adc/mcp3422.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/drivers/iio/adc/mcp3422.c b/drivers/iio/adc/mcp3422.c
index 50834fdcf738..59bf73304588 100644
--- a/drivers/iio/adc/mcp3422.c
+++ b/drivers/iio/adc/mcp3422.c
@@ -13,6 +13,7 @@
* voltage unit is nV.
*/
+#include <linux/bits.h>
#include <linux/err.h>
#include <linux/i2c.h>
#include <linux/module.h>
@@ -25,9 +26,9 @@
#include <linux/iio/sysfs.h>
/* Masks */
-#define MCP3422_CHANNEL_MASK 0x60
-#define MCP3422_PGA_MASK 0x03
-#define MCP3422_SRATE_MASK 0x0C
+#define MCP3422_CHANNEL_MASK GENMASK(6, 5)
+#define MCP3422_PGA_MASK GENMASK(1, 0)
+#define MCP3422_SRATE_MASK GENMASK(3, 2)
#define MCP3422_SRATE_240 0x0
#define MCP3422_SRATE_60 0x1
#define MCP3422_SRATE_15 0x2
@@ -36,7 +37,7 @@
#define MCP3422_PGA_2 1
#define MCP3422_PGA_4 2
#define MCP3422_PGA_8 3
-#define MCP3422_CONT_SAMPLING 0x10
+#define MCP3422_CONT_SAMPLING BIT(4)
#define MCP3422_CHANNEL(config) (((config) & MCP3422_CHANNEL_MASK) >> 5)
#define MCP3422_PGA(config) ((config) & MCP3422_PGA_MASK)
--
2.34.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2 2/2] iio: adc: mcp3422: write bit operations with bitfield macros
2026-04-17 16:57 [PATCH v2 0/2] iio: adc: mcp3422: apply bit manipulation macros Marcelo Machado Lage
2026-04-17 16:57 ` [PATCH v2 1/2] iio: adc: mcp3422: rewrite mask macros using bitfield macros Marcelo Machado Lage
@ 2026-04-17 16:57 ` Marcelo Machado Lage
2026-04-18 0:34 ` Andy Shevchenko
1 sibling, 1 reply; 6+ messages in thread
From: Marcelo Machado Lage @ 2026-04-17 16:57 UTC (permalink / raw)
To: andy, dlechner, jic23, nuno.sa
Cc: Marcelo Machado Lage, Vinicius Lira, linux-iio
Replace manual bit manipulations with FIELD_GET(), FIELD_PREP() and
FIELD_MODIFY() calls. The resulting code is more readable and
maintainable, and 6 macros previously defined in the header are not
needed anymore.
Following a request by Jonathan Cameron, this version of the patch
has 3 less macros than v1, now replaced by inline calls of FIELD_GET().
Thanks, Jonathan!
Signed-off-by: Marcelo Machado Lage <marcelomlage@usp.br>
Co-developed-by: Vinicius Lira <vinilira@usp.br>
Signed-off-by: Vinicius Lira <vinilira@usp.br>
---
drivers/iio/adc/mcp3422.c | 51 +++++++++++++++------------------------
1 file changed, 20 insertions(+), 31 deletions(-)
diff --git a/drivers/iio/adc/mcp3422.c b/drivers/iio/adc/mcp3422.c
index 59bf73304588..a2a7a850a825 100644
--- a/drivers/iio/adc/mcp3422.c
+++ b/drivers/iio/adc/mcp3422.c
@@ -13,6 +13,7 @@
* voltage unit is nV.
*/
+#include <linux/bitfield.h>
#include <linux/bits.h>
#include <linux/err.h>
#include <linux/i2c.h>
@@ -39,14 +40,6 @@
#define MCP3422_PGA_8 3
#define MCP3422_CONT_SAMPLING BIT(4)
-#define MCP3422_CHANNEL(config) (((config) & MCP3422_CHANNEL_MASK) >> 5)
-#define MCP3422_PGA(config) ((config) & MCP3422_PGA_MASK)
-#define MCP3422_SAMPLE_RATE(config) (((config) & MCP3422_SRATE_MASK) >> 2)
-
-#define MCP3422_CHANNEL_VALUE(value) (((value) << 5) & MCP3422_CHANNEL_MASK)
-#define MCP3422_PGA_VALUE(value) ((value) & MCP3422_PGA_MASK)
-#define MCP3422_SAMPLE_RATE_VALUE(value) ((value << 2) & MCP3422_SRATE_MASK)
-
#define MCP3422_CHAN(_index) \
{ \
.type = IIO_VOLTAGE, \
@@ -109,7 +102,7 @@ static int mcp3422_update_config(struct mcp3422 *adc, u8 newconfig)
static int mcp3422_read(struct mcp3422 *adc, int *value, u8 *config)
{
int ret = 0;
- u8 sample_rate = MCP3422_SAMPLE_RATE(adc->config);
+ u8 sample_rate = FIELD_GET(MCP3422_SRATE_MASK, adc->config);
u8 buf[4] = {0, 0, 0, 0};
u32 temp;
@@ -137,18 +130,18 @@ static int mcp3422_read_channel(struct mcp3422 *adc,
mutex_lock(&adc->lock);
- if (req_channel != MCP3422_CHANNEL(adc->config)) {
+ if (req_channel != FIELD_GET(MCP3422_CHANNEL_MASK, adc->config)) {
config = adc->config;
- config &= ~MCP3422_CHANNEL_MASK;
- config |= MCP3422_CHANNEL_VALUE(req_channel);
- config &= ~MCP3422_PGA_MASK;
- config |= MCP3422_PGA_VALUE(adc->pga[req_channel]);
+
+ FIELD_MODIFY(MCP3422_CHANNEL_MASK, &config, req_channel);
+ FIELD_MODIFY(MCP3422_PGA_MASK, &config, adc->pga[req_channel]);
+
ret = mcp3422_update_config(adc, config);
if (ret < 0) {
mutex_unlock(&adc->lock);
return ret;
}
- msleep(mcp3422_read_times[MCP3422_SAMPLE_RATE(adc->config)]);
+ msleep(mcp3422_read_times[FIELD_GET(MCP3422_SRATE_MASK, adc->config)]);
}
ret = mcp3422_read(adc, value, &config);
@@ -165,8 +158,8 @@ static int mcp3422_read_raw(struct iio_dev *iio,
struct mcp3422 *adc = iio_priv(iio);
int err;
- u8 sample_rate = MCP3422_SAMPLE_RATE(adc->config);
- u8 pga = MCP3422_PGA(adc->config);
+ u8 sample_rate = FIELD_GET(MCP3422_SRATE_MASK, adc->config);
+ u8 pga = FIELD_GET(MCP3422_PGA_MASK, adc->config);
switch (mask) {
case IIO_CHAN_INFO_RAW:
@@ -182,7 +175,7 @@ static int mcp3422_read_raw(struct iio_dev *iio,
return IIO_VAL_INT_PLUS_NANO;
case IIO_CHAN_INFO_SAMP_FREQ:
- *val1 = mcp3422_sample_rates[MCP3422_SAMPLE_RATE(adc->config)];
+ *val1 = mcp3422_sample_rates[FIELD_GET(MCP3422_SRATE_MASK, adc->config)];
return IIO_VAL_INT;
default:
@@ -200,7 +193,7 @@ static int mcp3422_write_raw(struct iio_dev *iio,
u8 temp;
u8 config = adc->config;
u8 req_channel = channel->channel;
- u8 sample_rate = MCP3422_SAMPLE_RATE(config);
+ u8 sample_rate = FIELD_GET(MCP3422_SRATE_MASK, config);
u8 i;
switch (mask) {
@@ -212,10 +205,8 @@ static int mcp3422_write_raw(struct iio_dev *iio,
if (val2 == mcp3422_scales[sample_rate][i]) {
adc->pga[req_channel] = i;
- config &= ~MCP3422_CHANNEL_MASK;
- config |= MCP3422_CHANNEL_VALUE(req_channel);
- config &= ~MCP3422_PGA_MASK;
- config |= MCP3422_PGA_VALUE(adc->pga[req_channel]);
+ FIELD_MODIFY(MCP3422_CHANNEL_MASK, &config, req_channel);
+ FIELD_MODIFY(MCP3422_PGA_MASK, &config, adc->pga[req_channel]);
return mcp3422_update_config(adc, config);
}
@@ -242,10 +233,8 @@ static int mcp3422_write_raw(struct iio_dev *iio,
return -EINVAL;
}
- config &= ~MCP3422_CHANNEL_MASK;
- config |= MCP3422_CHANNEL_VALUE(req_channel);
- config &= ~MCP3422_SRATE_MASK;
- config |= MCP3422_SAMPLE_RATE_VALUE(temp);
+ FIELD_MODIFY(MCP3422_CHANNEL_MASK, &config, req_channel);
+ FIELD_MODIFY(MCP3422_SRATE_MASK, &config, temp);
return mcp3422_update_config(adc, config);
@@ -284,7 +273,7 @@ static ssize_t mcp3422_show_scales(struct device *dev,
struct device_attribute *attr, char *buf)
{
struct mcp3422 *adc = iio_priv(dev_to_iio_dev(dev));
- u8 sample_rate = MCP3422_SAMPLE_RATE(adc->config);
+ u8 sample_rate = FIELD_GET(MCP3422_SRATE_MASK, adc->config);
return sprintf(buf, "0.%09u 0.%09u 0.%09u 0.%09u\n",
mcp3422_scales[sample_rate][0],
@@ -378,9 +367,9 @@ static int mcp3422_probe(struct i2c_client *client)
/* meaningful default configuration */
config = (MCP3422_CONT_SAMPLING
- | MCP3422_CHANNEL_VALUE(0)
- | MCP3422_PGA_VALUE(MCP3422_PGA_1)
- | MCP3422_SAMPLE_RATE_VALUE(MCP3422_SRATE_240));
+ | FIELD_PREP(MCP3422_CHANNEL_MASK, 0)
+ | FIELD_PREP(MCP3422_PGA_MASK, MCP3422_PGA_1)
+ | FIELD_PREP(MCP3422_SRATE_MASK, MCP3422_SRATE_240));
err = mcp3422_update_config(adc, config);
if (err < 0)
return err;
--
2.34.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v2 2/2] iio: adc: mcp3422: write bit operations with bitfield macros
2026-04-17 16:57 ` [PATCH v2 2/2] iio: adc: mcp3422: write bit operations with " Marcelo Machado Lage
@ 2026-04-18 0:34 ` Andy Shevchenko
0 siblings, 0 replies; 6+ messages in thread
From: Andy Shevchenko @ 2026-04-18 0:34 UTC (permalink / raw)
To: Marcelo Machado Lage, y
Cc: andy, dlechner, jic23, nuno.sa, Vinicius Lira, linux-iio
On Fri, Apr 17, 2026 at 01:57:47PM -0300, Marcelo Machado Lage wrote:
> Replace manual bit manipulations with FIELD_GET(), FIELD_PREP() and
> FIELD_MODIFY() calls. The resulting code is more readable and
> maintainable, and 6 macros previously defined in the header are not
> needed anymore.
> Following a request by Jonathan Cameron, this version of the patch
> has 3 less macros than v1, now replaced by inline calls of FIELD_GET().
> Thanks, Jonathan!
This paragraph has to be in the comment block...
> Signed-off-by: Marcelo Machado Lage <marcelomlage@usp.br>
> Co-developed-by: Vinicius Lira <vinilira@usp.br>
> Signed-off-by: Vinicius Lira <vinilira@usp.br>
> ---
...id est somewhere here.
> drivers/iio/adc/mcp3422.c | 51 +++++++++++++++------------------------
> 1 file changed, 20 insertions(+), 31 deletions(-)
...
> static int mcp3422_read_raw(struct iio_dev *iio,
> struct mcp3422 *adc = iio_priv(iio);
> int err;
>
> - u8 sample_rate = MCP3422_SAMPLE_RATE(adc->config);
> - u8 pga = MCP3422_PGA(adc->config);
> + u8 sample_rate = FIELD_GET(MCP3422_SRATE_MASK, adc->config);
> + u8 pga = FIELD_GET(MCP3422_PGA_MASK, adc->config);
Please, use common practices and be aligned with the already used style in this
driver. These lines:
- has to be part of the definition block (no blank lines)
- use a single-space indentation approach (no need many spaces before =)
- be located in the form of longest line first (reversed xmas tree order)
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2 1/2] iio: adc: mcp3422: rewrite mask macros using bitfield macros
2026-04-17 16:57 ` [PATCH v2 1/2] iio: adc: mcp3422: rewrite mask macros using bitfield macros Marcelo Machado Lage
@ 2026-04-18 16:26 ` David Lechner
2026-04-19 13:24 ` Jonathan Cameron
1 sibling, 0 replies; 6+ messages in thread
From: David Lechner @ 2026-04-18 16:26 UTC (permalink / raw)
To: Marcelo Machado Lage, andy, jic23, nuno.sa; +Cc: Vinicius Lira, linux-iio
On 4/17/26 11:57 AM, Marcelo Machado Lage wrote:
> Rewrite MCP3422_CHANNEL_MASK, MCP3422_PGA_MASK, MCP3422_PGA_MASK
> and MCP3422_CONT_SAMPLING using GENMASK() and BIT() macros from
> bitfield.h.
>
> The other macros MCP3422_SRATE_{240, 60, 15, 3} were not changed
> because they are also used as array indices.
>
> Signed-off-by: Marcelo Machado Lage <marcelomlage@usp.br>
> Co-developed-by: Vinicius Lira <vinilira@usp.br>
> Signed-off-by: Vinicius Lira <vinilira@usp.br>
> ---
> drivers/iio/adc/mcp3422.c | 9 +++++----
> 1 file changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/iio/adc/mcp3422.c b/drivers/iio/adc/mcp3422.c
> index 50834fdcf738..59bf73304588 100644
> --- a/drivers/iio/adc/mcp3422.c
> +++ b/drivers/iio/adc/mcp3422.c
> @@ -13,6 +13,7 @@
> * voltage unit is nV.
> */
>
> +#include <linux/bits.h>
> #include <linux/err.h>
> #include <linux/i2c.h>
> #include <linux/module.h>
> @@ -25,9 +26,9 @@
> #include <linux/iio/sysfs.h>
>
> /* Masks */
> -#define MCP3422_CHANNEL_MASK 0x60
> -#define MCP3422_PGA_MASK 0x03
> -#define MCP3422_SRATE_MASK 0x0C
> +#define MCP3422_CHANNEL_MASK GENMASK(6, 5)
> +#define MCP3422_PGA_MASK GENMASK(1, 0)
> +#define MCP3422_SRATE_MASK GENMASK(3, 2)
Would be nice to sort these in logical order (highest to lowest)
while we are touching this.
> #define MCP3422_SRATE_240 0x0
> #define MCP3422_SRATE_60 0x1
> #define MCP3422_SRATE_15 0x2
> @@ -36,7 +37,7 @@
> #define MCP3422_PGA_2 1
> #define MCP3422_PGA_4 2
> #define MCP3422_PGA_8 3
> -#define MCP3422_CONT_SAMPLING 0x10
> +#define MCP3422_CONT_SAMPLING BIT(4)
>
> #define MCP3422_CHANNEL(config) (((config) & MCP3422_CHANNEL_MASK) >> 5)
> #define MCP3422_PGA(config) ((config) & MCP3422_PGA_MASK)
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2 1/2] iio: adc: mcp3422: rewrite mask macros using bitfield macros
2026-04-17 16:57 ` [PATCH v2 1/2] iio: adc: mcp3422: rewrite mask macros using bitfield macros Marcelo Machado Lage
2026-04-18 16:26 ` David Lechner
@ 2026-04-19 13:24 ` Jonathan Cameron
1 sibling, 0 replies; 6+ messages in thread
From: Jonathan Cameron @ 2026-04-19 13:24 UTC (permalink / raw)
To: Marcelo Machado Lage; +Cc: andy, dlechner, nuno.sa, Vinicius Lira, linux-iio
On Fri, 17 Apr 2026 13:57:46 -0300
Marcelo Machado Lage <marcelomlage@usp.br> wrote:
> Rewrite MCP3422_CHANNEL_MASK, MCP3422_PGA_MASK, MCP3422_PGA_MASK
> and MCP3422_CONT_SAMPLING using GENMASK() and BIT() macros from
> bitfield.h.
>
> The other macros MCP3422_SRATE_{240, 60, 15, 3} were not changed
> because they are also used as array indices.
>
> Signed-off-by: Marcelo Machado Lage <marcelomlage@usp.br>
> Co-developed-by: Vinicius Lira <vinilira@usp.br>
> Signed-off-by: Vinicius Lira <vinilira@usp.br>
> ---
> drivers/iio/adc/mcp3422.c | 9 +++++----
> 1 file changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/iio/adc/mcp3422.c b/drivers/iio/adc/mcp3422.c
> index 50834fdcf738..59bf73304588 100644
> --- a/drivers/iio/adc/mcp3422.c
> +++ b/drivers/iio/adc/mcp3422.c
> @@ -13,6 +13,7 @@
> * voltage unit is nV.
> */
>
> +#include <linux/bits.h>
> #include <linux/err.h>
> #include <linux/i2c.h>
> #include <linux/module.h>
> @@ -25,9 +26,9 @@
> #include <linux/iio/sysfs.h>
>
> /* Masks */
This comment covers the first few defines, but not the reset.
Delete it whilst you are here to avoid future confusion.
> -#define MCP3422_CHANNEL_MASK 0x60
> -#define MCP3422_PGA_MASK 0x03
> -#define MCP3422_SRATE_MASK 0x0C
> +#define MCP3422_CHANNEL_MASK GENMASK(6, 5)
> +#define MCP3422_PGA_MASK GENMASK(1, 0)
> +#define MCP3422_SRATE_MASK GENMASK(3, 2)
> #define MCP3422_SRATE_240 0x0
> #define MCP3422_SRATE_60 0x1
> #define MCP3422_SRATE_15 0x2
> @@ -36,7 +37,7 @@
> #define MCP3422_PGA_2 1
> #define MCP3422_PGA_4 2
> #define MCP3422_PGA_8 3
> -#define MCP3422_CONT_SAMPLING 0x10
> +#define MCP3422_CONT_SAMPLING BIT(4)
>
> #define MCP3422_CHANNEL(config) (((config) & MCP3422_CHANNEL_MASK) >> 5)
> #define MCP3422_PGA(config) ((config) & MCP3422_PGA_MASK)
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-04-19 13:24 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-17 16:57 [PATCH v2 0/2] iio: adc: mcp3422: apply bit manipulation macros Marcelo Machado Lage
2026-04-17 16:57 ` [PATCH v2 1/2] iio: adc: mcp3422: rewrite mask macros using bitfield macros Marcelo Machado Lage
2026-04-18 16:26 ` David Lechner
2026-04-19 13:24 ` Jonathan Cameron
2026-04-17 16:57 ` [PATCH v2 2/2] iio: adc: mcp3422: write bit operations with " Marcelo Machado Lage
2026-04-18 0:34 ` Andy Shevchenko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox