[PATCH v3 11/14] gpio: regmap: Use regmap_test_bits() for single bit reads
Janani Sunil <[email protected]>
| Newsgroups | org.kernel.vger.linux-gpio,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-doc,org.kernel.vger.linux-iio,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
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 <[email protected]> --- 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