[PATCH v3 11/14] gpio: regmap: Use regmap_test_bits() for single bit reads
From: Janani Sunil
Date: Thu Aug 13 2026 - 10:04:46 EST
Use regmap_test_bits() when reading a single GPIO value from a normal
register and when reading the direction bit.
Signed-off-by: Janani Sunil <janani.sunil@xxxxxxxxxx>
---
drivers/gpio/gpio-regmap.c | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/drivers/gpio/gpio-regmap.c b/drivers/gpio/gpio-regmap.c
index 51b4d69b8740..a5188f8569e3 100644
--- a/drivers/gpio/gpio-regmap.c
+++ b/drivers/gpio/gpio-regmap.c
@@ -84,14 +84,15 @@ static int gpio_regmap_get(struct gpio_chip *chip, unsigned int offset)
return ret;
/* ensure we don't spoil any register cache with pin input values */
- if (gpio->reg_dat_base == gpio->reg_set_base)
+ if (gpio->reg_dat_base == gpio->reg_set_base) {
ret = regmap_read_bypassed(gpio->regmap, reg, &val);
- else
- ret = regmap_read(gpio->regmap, reg, &val);
- if (ret)
- return ret;
+ if (ret)
+ return ret;
- return !!(val & mask);
+ return !!(val & mask);
+ }
+
+ return regmap_test_bits(gpio->regmap, reg, mask);
}
static int gpio_regmap_set(struct gpio_chip *chip, unsigned int offset,
@@ -157,7 +158,7 @@ static int gpio_regmap_get_direction(struct gpio_chip *chip,
unsigned int offset)
{
struct gpio_regmap *gpio = gpiochip_get_data(chip);
- unsigned int base, val, reg, mask;
+ unsigned int base, reg, mask;
int invert, ret;
if (gpio_regmap_fixed_direction(gpio, offset)) {
@@ -186,11 +187,11 @@ static int gpio_regmap_get_direction(struct gpio_chip *chip,
if (ret)
return ret;
- ret = regmap_read(gpio->regmap, reg, &val);
- if (ret)
+ ret = regmap_test_bits(gpio->regmap, reg, mask);
+ if (ret < 0)
return ret;
- if (!!(val & mask) ^ invert)
+ if (ret ^ invert)
return GPIO_LINE_DIRECTION_OUT;
else
return GPIO_LINE_DIRECTION_IN;
--
2.43.0