gpio: siox: normalize return value of gpio_get()

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 86ef402d80 ("gpiolib: sanitize the return value of
gpio_chip::get()"), gpiolib rejected such values with -EBADE and reads
of a high line failed. Commit ec2cceadfa ("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@gmail.com>
Link: https://patch.msgid.link/20260922211702.1480614-1-khurana.ridham222@gmail.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
This commit is contained in:
Ridham Khurana 2026-09-22 21:16:58 +00:00 committed by Bartosz Golaszewski
parent b399579a8e
commit 209fcf6258

View File

@ -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);