]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
iio: adc: ad4170: use lookup table for gpio mask selection
authorGuilherme Ivo Bozi <guilherme.bozi@usp.br>
Sun, 5 Apr 2026 21:37:26 +0000 (18:37 -0300)
committerJonathan Cameron <jic23@kernel.org>
Mon, 27 Apr 2026 08:58:23 +0000 (09:58 +0100)
Both ad4170_gpio_direction_input() and
ad4170_gpio_direction_output() duplicate the same switch
statement to map a GPIO offset to its corresponding mask.

Replace the switch with a static lookup table, simplifying the code
and avoiding duplication. This also makes future extensions easier.

No functional change intended.

Signed-off-by: Guilherme Ivo Bozi <guilherme.bozi@usp.br>
Acked-by: Marcelo Schmitt <marcelo.schmitt1@gmail.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/iio/adc/ad4170-4.c

index 77af0e6b2c59642eb2538f3fc40292c1bf7c1d8c..627cbf5a37b0b48babcc00383ecc4601414d06a1 100644 (file)
@@ -1699,34 +1699,29 @@ err_release:
        return ret;
 }
 
+static const unsigned long gpio_masks[] = {
+       AD4170_GPIO_MODE_GPIO0_MSK,
+       AD4170_GPIO_MODE_GPIO1_MSK,
+       AD4170_GPIO_MODE_GPIO2_MSK,
+       AD4170_GPIO_MODE_GPIO3_MSK,
+};
+
 static int ad4170_gpio_direction_input(struct gpio_chip *gc, unsigned int offset)
 {
        struct iio_dev *indio_dev = gpiochip_get_data(gc);
        struct ad4170_state *st = iio_priv(indio_dev);
-       unsigned long gpio_mask;
        int ret;
 
        if (!iio_device_claim_direct(indio_dev))
                return -EBUSY;
 
-       switch (offset) {
-       case 0:
-               gpio_mask = AD4170_GPIO_MODE_GPIO0_MSK;
-               break;
-       case 1:
-               gpio_mask = AD4170_GPIO_MODE_GPIO1_MSK;
-               break;
-       case 2:
-               gpio_mask = AD4170_GPIO_MODE_GPIO2_MSK;
-               break;
-       case 3:
-               gpio_mask = AD4170_GPIO_MODE_GPIO3_MSK;
-               break;
-       default:
+       if (offset >= ARRAY_SIZE(gpio_masks)) {
                ret = -EINVAL;
                goto err_release;
        }
-       ret = regmap_update_bits(st->regmap, AD4170_GPIO_MODE_REG, gpio_mask,
+
+       ret = regmap_update_bits(st->regmap, AD4170_GPIO_MODE_REG,
+                                gpio_masks[offset],
                                 AD4170_GPIO_MODE_GPIO_INPUT << (2 * offset));
 
 err_release:
@@ -1740,7 +1735,6 @@ static int ad4170_gpio_direction_output(struct gpio_chip *gc,
 {
        struct iio_dev *indio_dev = gpiochip_get_data(gc);
        struct ad4170_state *st = iio_priv(indio_dev);
-       unsigned long gpio_mask;
        int ret;
 
        ret = ad4170_gpio_set(gc, offset, value);
@@ -1750,24 +1744,13 @@ static int ad4170_gpio_direction_output(struct gpio_chip *gc,
        if (!iio_device_claim_direct(indio_dev))
                return -EBUSY;
 
-       switch (offset) {
-       case 0:
-               gpio_mask = AD4170_GPIO_MODE_GPIO0_MSK;
-               break;
-       case 1:
-               gpio_mask = AD4170_GPIO_MODE_GPIO1_MSK;
-               break;
-       case 2:
-               gpio_mask = AD4170_GPIO_MODE_GPIO2_MSK;
-               break;
-       case 3:
-               gpio_mask = AD4170_GPIO_MODE_GPIO3_MSK;
-               break;
-       default:
+       if (offset >= ARRAY_SIZE(gpio_masks)) {
                ret = -EINVAL;
                goto err_release;
        }
-       ret = regmap_update_bits(st->regmap, AD4170_GPIO_MODE_REG, gpio_mask,
+
+       ret = regmap_update_bits(st->regmap, AD4170_GPIO_MODE_REG,
+                                gpio_masks[offset],
                                 AD4170_GPIO_MODE_GPIO_OUTPUT << (2 * offset));
 
 err_release: