]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iio: adc: mcp3422: write bit operations using bitfield.h APIs
authorMarcelo Machado Lage <marcelomlage@usp.br>
Wed, 29 Apr 2026 22:44:01 +0000 (19:44 -0300)
committerJonathan Cameron <jic23@kernel.org>
Sun, 31 May 2026 09:59:35 +0000 (10:59 +0100)
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.

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>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/iio/adc/mcp3422.c

index 0cd0e7d39e393cf88a6452fce5e4bca453bead7f..0cbd7a87479853784c443d0c850efa5b5fb72e32 100644 (file)
@@ -13,6 +13,7 @@
  * voltage unit is nV.
  */
 
+#include <linux/bitfield.h>
 #include <linux/bits.h>
 #include <linux/err.h>
 #include <linux/i2c.h>
 #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);
@@ -164,9 +157,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 +174,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 +192,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 +204,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 +232,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 +272,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],
@@ -377,10 +365,10 @@ 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));
+       config = MCP3422_CONT_SAMPLING |
+                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;