[PATCH] gpio: siox: normalize return value of gpio_get
From: Ridham Khurana
Date: Tue Sep 22 2026 - 17:19:21 EST
gpio_siox_get() returns the masked bit from the cached input or output
byte, so for most lines a high level reads back as a value between 2
and 128 instead of 1. The GPIO get callback is expected to return 0 or
1 (or a negative error code).
Since commit 86ef402d805d ("gpiolib: sanitize the return value of
gpio_chip::get()"), gpiolib rejected such values with -EBADE and reads
of a high line failed. Commit ec2cceadfae7 ("gpiolib: normalize the
return value of gc->get() on behalf of buggy drivers") made gpiolib
clamp the value instead, but it now warns on every such read.
Normalize the value returned by gpio_siox_get() to the [0, 1] range.
Signed-off-by: Ridham Khurana <khurana.ridham222@xxxxxxxxx>
---
Build-tested on arm64 with CONFIG_GPIO_SIOX=m on next-20260922. Not tested on hardware.
drivers/gpio/gpio-siox.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpio/gpio-siox.c b/drivers/gpio/gpio-siox.c
index 958034b9f3f3..d60680ace144 100644
--- a/drivers/gpio/gpio-siox.c
+++ b/drivers/gpio/gpio-siox.c
@@ -148,11 +148,11 @@ static int gpio_siox_get(struct gpio_chip *chip, unsigned int offset)
if (offset >= 12) {
unsigned int bitpos = 19 - offset;
- ret = ddata->setdata[0] & (1 << bitpos);
+ ret = !!(ddata->setdata[0] & (1 << bitpos));
} else {
unsigned int bitpos = 11 - offset;
- ret = ddata->getdata[bitpos / 8] & (1 << (bitpos % 8));
+ ret = !!(ddata->getdata[bitpos / 8] & (1 << (bitpos % 8)));
}
mutex_unlock(&ddata->lock);
--
2.47.3